OLD | NEW |
| (Empty) |
1 library petitparser.test.all_benchmark; | |
2 | |
3 import 'package:petitparser/petitparser.dart'; | |
4 | |
5 double benchmark(Function function, | |
6 [int warmup = 100, int milliseconds = 2500]) { | |
7 var count = 0; | |
8 var elapsed = 0; | |
9 var watch = new Stopwatch(); | |
10 while (warmup-- > 0) { | |
11 function(); | |
12 } | |
13 watch.start(); | |
14 while (elapsed < milliseconds) { | |
15 function(); | |
16 elapsed = watch.elapsedMilliseconds; | |
17 count++; | |
18 } | |
19 return elapsed / count; | |
20 } | |
21 | |
22 Function charTest(List<String> inputs, Parser parser) { | |
23 return () { | |
24 for (var i = 0; i < inputs.length; i++) { | |
25 parser.parse(inputs[i]); | |
26 } | |
27 }; | |
28 } | |
29 | |
30 final characters = new List.generate(256, (value) => new String.fromCharCode(val
ue)); | |
31 | |
32 Function stringTest(String input, Parser parser) { | |
33 return () { | |
34 parser.parse(input); | |
35 }; | |
36 } | |
37 | |
38 final string = characters.join(); | |
39 | |
40 final benchmarks = { | |
41 | |
42 // char tests | |
43 "any()": charTest(characters, any()), | |
44 "anyOf('uncopyrightable')": charTest(characters, anyOf('uncopyrightable')), | |
45 "char('a')": charTest(characters, char('a')), | |
46 "digit()": charTest(characters, digit()), | |
47 "letter()": charTest(characters, letter()), | |
48 "lowercase()": charTest(characters, lowercase()), | |
49 "noneOf('uncopyrightable')": charTest(characters, noneOf('uncopyrightable')), | |
50 "pattern('^a')": charTest(characters, pattern('^a')), | |
51 "pattern('^a-cx-zA-CX-Z1-37-9')": charTest(characters, pattern('^a-cx-zA-CX-Z1
-37-9')), | |
52 "pattern('^a-z')": charTest(characters, pattern('^a-z')), | |
53 "pattern('^acegik')": charTest(characters, pattern('^acegik')), | |
54 "pattern('a')": charTest(characters, pattern('a')), | |
55 "pattern('a-cx-zA-CX-Z1-37-9')": charTest(characters, pattern('a-cx-zA-CX-Z1-3
7-9')), | |
56 "pattern('a-z')": charTest(characters, pattern('a-z')), | |
57 "pattern('acegik')": charTest(characters, pattern('acegik')), | |
58 "range('a', 'z')": charTest(characters, range('a', 'z')), | |
59 "uppercase()": charTest(characters, uppercase()), | |
60 "whitespace()": charTest(characters, whitespace()), | |
61 "word()": charTest(characters, word()), | |
62 | |
63 // combinator tests | |
64 "star()": stringTest(string, any().star()), | |
65 "starLazy()": stringTest(string, any().starLazy(failure())), | |
66 "starGreedy()": stringTest(string, any().starGreedy(failure())), | |
67 "plus()": stringTest(string, any().plus()), | |
68 "plusLazy()": stringTest(string, any().plusLazy(failure())), | |
69 "plusGreedy()": stringTest(string, any().plusGreedy(failure())), | |
70 "or()": stringTest(string, failure().or(any()).star()), | |
71 "seq()": stringTest(string, new SequenceParser(new List.filled(string.length,
any()))), | |
72 }; | |
73 | |
74 void main() { | |
75 print('<?xml version="1.0"?>'); | |
76 print('<benchmarks>'); | |
77 for (var name in benchmarks.keys) { | |
78 print(' <benchmark name="$name">${benchmark(benchmarks[name])}</benchmark>'
); | |
79 } | |
80 print('</benchmarks>'); | |
81 } | |
OLD | NEW |