| --- |
| title: Tests and Benchmark |
| --- |
| # Tests and Benchmark |
| |
| ## Tests |
| |
| There exist several test suites for testing the correctness of a Markdown implementation. The |
| original [Markdown Test Suite] is the standard which one needs to test against. The [PHP Markdown |
| suite][MDTest] contains the original test suite and several more tests (some specifically geared |
| towards the extension of the PHP Markdown Extra package). I have used the latter test tool to |
| roughly verify that kramdown is able to parse standard Markdown. However, since the syntax used by |
| kramdown varies slightly from standard Markdown most of the tests fail - which is fine. When looking |
| at the differences one can see that the failures result from these differences. |
| |
| Besides using the above mentioned test suite kramdown comes with its own set of tests which is used |
| to verify that the implementation matches the kramdown specification. |
| |
| If you believe you have found a bug in the implementation, please follow these steps: |
| |
| * Check the [syntax page](syntax.html) and see if the behaviour is not intended. |
| |
| * If the behaviour is not intended and it seems that kramdown should parse some text in another |
| fashion, please open a [bug report] and attach two files: one with the text and one with the HTML |
| conversion you think is correct. |
| |
| [bug report]: http://github.com/gettalong/kramdown/issues |
| |
| |
| ## Benchmark |
| |
| kramdown comes with a small benchmark to test how fast it is in regard to four other Ruby Markdown |
| implementations: Maruku, BlueFeather, BlueCloth, RDiscount and Redcarpet. The first two are written |
| using only Ruby, the latter three are written in C and need to be compiled. |
| |
| As one can see below, kramdown is currently (September 2014) ~3x faster than Maruku, ~4.5x faster |
| than BlueFeather but ~30x slower than RDiscount and ~150x slower than Redcarpet: |
| |
| <pre><code> |
| Running tests on 2014-09-16 under ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux] |
| |
| Test using file mdsyntax.text and 20 runs |
| Rehearsal ---------------------------------------------------- |
| kramdown 1.4.2 0.900000 0.010000 0.910000 ( 0.914992) |
| Maruku 0.7.1 2.360000 0.040000 2.400000 ( 2.403571) |
| BlueFeather 0.41 3.760000 0.010000 3.770000 ( 3.776421) |
| BlueCloth 2.2.0 0.050000 0.000000 0.050000 ( 0.050221) |
| RDiscount 2.1.7 0.020000 0.000000 0.020000 ( 0.024180) |
| redcarpet 3.1.2 0.010000 0.000000 0.010000 ( 0.004579) |
| ------------------------------------------- total: 7.160000sec |
| |
| user system total real |
| kramdown 1.4.2 0.830000 0.000000 0.830000 ( 0.834144) |
| Maruku 0.7.1 2.250000 0.030000 2.280000 ( 2.286579) |
| BlueFeather 0.41 3.680000 0.010000 3.690000 ( 3.693769) |
| BlueCloth 2.2.0 0.050000 0.000000 0.050000 ( 0.044831) |
| RDiscount 2.1.7 0.020000 0.000000 0.020000 ( 0.022847) |
| redcarpet 3.1.2 0.010000 0.000000 0.010000 ( 0.004601) |
| |
| Real time of X divided by real time of kramdown |
| Maruku 2.7412 |
| BlueFeather 4.4282 |
| BlueCloth 0.0537 |
| RDiscount 0.0274 |
| redcarpet 0.0055 |
| |
| Test using file mdbasics.text and 20 runs |
| Rehearsal ---------------------------------------------------- |
| kramdown 1.4.2 0.150000 0.000000 0.150000 ( 0.149989) |
| Maruku 0.7.1 0.580000 0.010000 0.590000 ( 0.584910) |
| BlueFeather 0.41 0.780000 0.000000 0.780000 ( 0.788740) |
| BlueCloth 2.2.0 0.020000 0.000000 0.020000 ( 0.014700) |
| RDiscount 2.1.7 0.000000 0.000000 0.000000 ( 0.007692) |
| redcarpet 3.1.2 0.010000 0.000000 0.010000 ( 0.002064) |
| ------------------------------------------- total: 1.550000sec |
| |
| user system total real |
| kramdown 1.4.2 0.150000 0.000000 0.150000 ( 0.151586) |
| Maruku 0.7.1 0.520000 0.000000 0.520000 ( 0.525707) |
| BlueFeather 0.41 0.770000 0.010000 0.780000 ( 0.763559) |
| BlueCloth 2.2.0 0.020000 0.000000 0.020000 ( 0.015509) |
| RDiscount 2.1.7 0.010000 0.000000 0.010000 ( 0.006545) |
| redcarpet 3.1.2 0.000000 0.000000 0.000000 ( 0.001475) |
| |
| Real time of X divided by real time of kramdown |
| Maruku 3.468 |
| BlueFeather 5.0371 |
| BlueCloth 0.1023 |
| RDiscount 0.0432 |
| redcarpet 0.0097 |
| </code></pre> |
| |
| And here are some graphs which show the execution times of the various kramdown releases on |
| different Ruby interpreters: |
| |
| ![ruby 1.8.7p302]({relocatable: img/graph-ruby-1.8.7-302.png}) |
| ![ruby 1.9.3p448]({relocatable: img/graph-ruby-1.9.3p448-448.png}) |
| ![ruby 2.0.0p247]({relocatable: img/graph-ruby-2.0.0p247-247.png}) |
| ![ruby 2.1.2p95]({relocatable: img/graph-ruby-2.1.2p95-95.png}) |
| ![jruby 1.7.15]({relocatable: img/graph-jruby-1.7.15-392.png}) |
| ![rubinius 2.2.10]({relocatable: img/graph-rubinius-2.2.10-0.png}) |
| |
| [Markdown Test Suite]: http://daringfireball.net/projects/downloads/MarkdownTest_1.0.zip |
| [MDTest]: http://www.michelf.com/docs/projets/mdtest-1.0.zip |