on 0ff8a91 help sign in
elk/bench/src/Native/Benchmark.js
78 lines 1.6 kB history raw
1Elm.Native.Benchmark = {};
2Elm.Native.Benchmark.make = function(localRuntime) {
4 localRuntime.Native = localRuntime.Native || {};
5 localRuntime.Native.Benchmark = localRuntime.Native.Benchmark || {};
6 if (localRuntime.Native.Benchmark.values)
7 {
8 return localRuntime.Native.Benchmark.values;
9 }
11 var List = Elm.List.make(localRuntime);
12 var Task = Elm.Native.Task.make(localRuntime);
15 // RUN SOME BENCHMARKS
17 function run(benchmark)
18 {
19 return Task.asyncFunction(function(callback)
20 {
21 var overallSuite = new Benchmark.Suite;
22 var statistics = addTests(overallSuite, benchmark);
23 overallSuite.on('complete', function(event) {
24 callback(Task.succeed(statistics));
25 });
26 overallSuite.run({ async: true });
27 });
28 }
31 // ADD TESTS TO THE JS BENCHMARK SUITE
33 function addTests(overallSuite, benchmark)
34 {
35 if (benchmark.ctor === 'Suite')
36 {
37 return {
38 ctor: 'StatSuite',
39 _0: benchmark._0,
40 _1: A2(List.map, curriedAddTests(overallSuite), benchmark._1)
41 };
42 }
44 // WE MUST BE LOOKING AT A TEST
45 var name = benchmark._0;
46 var thunk = benchmark._1;
48 var statistics = {
49 ctor: 'Result',
50 _0: name,
51 _1: null
52 };
54 overallSuite.add(name, thunk, {
55 onStart: function() {
56 console.log('running: ' + name);
57 },
58 onComplete: function(event) {
59 var jsBenchmark = event.target;
60 statistics._1 = {
61 mean: jsBenchmark.stats.mean,
62 hz: jsBenchmark.hz
63 };
64 }
65 });
67 return statistics;
68 }
70 var curriedAddTests = F2(addTests);
74 return localRuntime.Native.Benchmark.values = {
75 makeThunk: function(x) { return x; },
76 run: run
77 };
78};