# frozen_string_literal: true

require "benchmark/ips"
require File.expand_path("../../../../config/environment", __FILE__)

# set any flags here
# MiniRacer::Platform.set_flags! :noturbo

tests = [
  ["tiny post", "**hello**"],
  ["giant post", File.read("giant_post.md")],
  ["most features", File.read("most_features.md")],
  ["lots of mentions", File.read("lots_of_mentions.md")],
]

PrettyText.cook("")
PrettyText.v8.eval("window.commonmark = window.markdownit('commonmark')")

# Benchmark.ips do |x|
#   x.report("markdown") do
#     PrettyText.markdown("x")
#   end
#
#   x.report("cook") do
#     PrettyText.cook("y")
#   end
# end
#
# exit

Benchmark.ips do |x|
  [true, false].each do |sanitize|
    tests.each do |test, text|
      x.report("#{test} sanitize: #{sanitize}") { PrettyText.markdown(text, sanitize: sanitize) }
    end
  end

  tests.each do |test, text|
    x.report("markdown it no extensions commonmark #{test}") do
      PrettyText.v8.eval("window.commonmark.render(#{text.inspect})")
    end
  end
end

# 27-07-2017 - Sam's NUC
#
# v8 5.7
#
#
# tiny post sanitize: true
#                         160.678  (±19.9%) i/s -    760.000  in   5.005630s
# giant post sanitize: true
#                         132.195  (±14.4%) i/s -    649.000  in   5.042695s
# most features sanitize: true
#                          56.205  (± 8.9%) i/s -    280.000  in   5.038138s
# lots of mentions sanitize: true
#                           0.318  (± 0.0%) i/s -      2.000  in   6.293644s
# tiny post sanitize: false
#                         404.304  (±20.8%) i/s -      1.920k in   5.019903s
# giant post sanitize: false
#                         327.721  (±11.9%) i/s -      1.624k in   5.033749s
# most features sanitize: false
#                          76.649  (±10.4%) i/s -    385.000  in   5.085552s
# lots of mentions sanitize: false
#                           0.306  (± 0.0%) i/s -      2.000  in   6.525968s
# markdown it no extensions commonmark tiny post
#                           5.871k (±19.1%) i/s -     28.544k in   5.073585s
# markdown it no extensions commonmark giant post
#                           1.006k (±12.5%) i/s -      4.960k in   5.041623s
# markdown it no extensions commonmark most features
#                           1.447k (± 8.9%) i/s -      7.205k in   5.029094s
# markdown it no extensions commonmark lots of mentions
#                           1.962k (± 8.3%) i/s -      9.850k in   5.061684s
#
#
# v8 5.9
#
#
# tiny post sanitize: true
#                         156.179  (±16.0%) i/s -    765.000  in   5.059401s
# giant post sanitize: true
#                         129.972  (±10.8%) i/s -    650.000  in   5.071824s
# most features sanitize: true
#                          54.960  (± 9.1%) i/s -    275.000  in   5.051284s
# lots of mentions sanitize: true
#                           0.321  (± 0.0%) i/s -      2.000  in   6.251009s
# tiny post sanitize: false
#                         431.159  (±10.4%) i/s -      2.166k in   5.085303s
# giant post sanitize: false
#                         300.236  (±11.7%) i/s -      1.479k in   5.029557s
# most features sanitize: false
#                          73.808  (±10.8%) i/s -    371.000  in   5.092310s
# lots of mentions sanitize: false
#                           0.297  (± 0.0%) i/s -      2.000  in   6.729708s
# markdown it no extensions commonmark tiny post
#                           6.421k (±13.0%) i/s -     32.012k in   5.084672s
# markdown it no extensions commonmark giant post
#                         901.622  (± 9.2%) i/s -      4.452k in   5.016748s
# markdown it no extensions commonmark most features
#                           1.410k (± 6.5%) i/s -      7.112k in   5.070053s
# markdown it no extensions commonmark lots of mentions
#                           1.934k (± 6.4%) i/s -      9.672k in   5.025858s
#
# v8 noturbo 5.9
#
#
# tiny post sanitize: true
#                         105.152  (±17.1%) i/s -    512.000  in   5.034419s
# giant post sanitize: true
#                          97.002  (±12.4%) i/s -    480.000  in   5.038382s
# most features sanitize: true
#                          46.355  (±12.9%) i/s -    228.000  in   5.009251s
# lots of mentions sanitize: true
#                           0.278  (± 0.0%) i/s -      2.000  in   7.205837s
# tiny post sanitize: false
#                         201.166  (±13.4%) i/s -    990.000  in   5.017725s
# giant post sanitize: false
#                         174.212  (±10.9%) i/s -    867.000  in   5.040859s
# most features sanitize: false
#                          60.272  (±14.9%) i/s -    295.000  in   5.029353s
# lots of mentions sanitize: false
#                           0.309  (± 0.0%) i/s -      2.000  in   6.483433s
# markdown it no extensions commonmark tiny post
#                           6.331k (±13.8%) i/s -     31.065k in   5.023613s
# markdown it no extensions commonmark giant post
#                           1.045k (± 9.6%) i/s -      5.208k in   5.053733s
# markdown it no extensions commonmark most features
#                           1.448k (± 6.7%) i/s -      7.239k in   5.024831s
# markdown it no extensions commonmark lots of mentions
#                           1.986k (± 5.2%) i/s -      9.990k in   5.044624s