Compute the iterations based on the duration of the baseline
diff --git a/test/mustache_performance.dart b/test/mustache_performance.dart
index 94be5ee..e0de4a2 100644
--- a/test/mustache_performance.dart
+++ b/test/mustache_performance.dart
@@ -1,10 +1,12 @@
import 'package:mustache4dart/mustache4dart.dart';
-const ITERATIONS = 10000;
+const ITERATIONS = 1000;
var AVAILABLE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
main() {
+ final iterations = findIterations();
+
final tmpl = createTemplate();
final map = {
@@ -16,20 +18,18 @@
};
final ctmpl = compile(tmpl);
- final warmup = duration(() => "${ctmpl(map)}--${render(tmpl, map)}");
+ final warmup =
+ duration(() => "${ctmpl(map)}--${render(tmpl, map)}", iterations);
print(
"Warmup rendering of template with length ${tmpl.length} took ${warmup}millis");
- final d = duration(() => render(tmpl, map));
+ final d = duration(() => render(tmpl, map), iterations);
print("Uncompiled rendering took ${d}millis");
- final d2 = duration(() => ctmpl(map));
+ final d2 = duration(() => ctmpl(map), iterations);
print("Compiled rendering took ${d2}millis");
print("Score relation: ${d2/d}");
-
- final base = duration(baselineTest);
- print("Baseline test took: ${base}millis");
}
createTemplate() {
@@ -45,6 +45,17 @@
return buf.toString();
}
+findIterations([num initialIterations = ITERATIONS]) {
+ var iterations = initialIterations;
+ var time = duration(baselineTest, iterations);
+ while (time < 100) {
+ iterations = iterations * 2;
+ time = duration(baselineTest, iterations);
+ print("Baseline test took: ${time}millis for ${iterations} iterations");
+ }
+ return iterations;
+}
+
baselineTest() {
final length = AVAILABLE_CHARS.length;
var newString = '';
@@ -54,9 +65,9 @@
return newString;
}
-num duration(f()) {
+num duration(f(), [numOfIterations = ITERATIONS]) {
final start = new DateTime.now();
- for (int i = 0; i < ITERATIONS; i++) {
+ for (int i = 0; i < numOfIterations; i++) {
f();
}
final end = new DateTime.now();