@@ -40,53 +40,120 @@ object Generator {
4040 val q = " \" "
4141 if (target.exists) throw new java.io.IOException (" Generator will not write to existing file: " + target.getPath)
4242 writeTo(target){ pr =>
43- pr( """ package bench.test""" )
44- pr( """ """ )
45- pr( """ import bench.generate._, bench.operate._, bench.generate.EnableIterators._""" )
46- pr( """ import scala.compat.java8.StreamConverters._""" )
47- pr( """ """ )
48- pr( """ object Agreement {""" )
49- pr( """ def run() {""" )
50- pr( """ val wrong = new collection.mutable.ArrayBuffer[String]""" )
51- pr( """ def check[A](a1: A, a2: => A, msg: String) {""" )
52- pr( """ var t = System.nanoTime""" )
53- pr( """ if (!CloseEnough(a1, { val ans = a2; t = System.nanoTime - t; ans}))""" )
54- pr( """ wrong += msg""" )
55- pr( """ if (t > 2000000000) wrong += "Slow " + msg""" )
56- pr( """ }""" )
57- pr( s " val m = (new bench.generate.Things( ${sayArrayI(sizes)})).N; " )
43+ pr( """ package bench.test""" )
44+ pr( """ """ )
45+ pr( """ import bench.generate._, bench.operate._, bench.generate.EnableIterators._""" )
46+ pr( """ import scala.compat.java8.StreamConverters._""" )
47+ pr( """ """ )
48+ pr( """ object Agreement {""" )
49+ pr( """ def run() {""" )
50+ pr( """ val wrong = new collection.mutable.ArrayBuffer[String]""" )
51+ pr( """ def check[A](a1: A, a2: => A, msg: String) {""" )
52+ pr( """ var t = System.nanoTime""" )
53+ pr( """ if (!CloseEnough(a1, { val ans = a2; t = System.nanoTime - t; ans}))""" )
54+ pr( """ wrong += msg""" )
55+ pr( """ if (t > 2000000000) wrong += "Slow " + msg""" )
56+ pr( """ }""" )
57+ pr( s " val m = (new bench.generate.Things( ${sayArrayI(sizes)})).N; " )
5858 allops.foreach{ case (o, t, fs) =>
5959 names.foreach{ n =>
60- pr( s " { // Scope for operations $o collection $n" )
61- pr( s " val x = new bench.generate.Things( ${sayArrayI(sizes)}) " )
60+ pr( s " { // Scope for operations $o collection $n" )
61+ pr( s " val x = new bench.generate.Things( ${sayArrayI(sizes)}) " )
6262 parsefs(fs).foreach{ case (f, pf, ord) =>
6363 if (ordname(n) || ! ord) {
64- pr( """ for (i <- 0 until m) {""" )
65- pr( s " val z = $o. $f(x.arr.c $t(i)) " )
64+ pr( """ for (i <- 0 until m) {""" )
65+ pr( s " val z = $o. $f(x.arr.c $t(i)) " )
6666 if (nojname(n)) {
67- pr( s " check(z, $o. $f(x. $n.c $t(i)), ${q}c $t $f $n ${q}+i.toString) " );
68- pr( s " check(z, $o. $f(x. $n.i $t(i)), ${q}i $t $f $n ${q}+i.toString) " )
67+ pr( s " check(z, $o. $f(x. $n.c $t(i)), ${q}c $t $f $n ${q}+i.toString) " );
68+ pr( s " check(z, $o. $f(x. $n.i $t(i)), ${q}i $t $f $n ${q}+i.toString) " )
6969 }
7070 if (sqnname(n)) {
71- pr( s " check(z, $o. $f(x. $n.ss $t(i)), ${q}ss $t $f $n ${q}+i.toString) " )
71+ pr( s " check(z, $o. $f(x. $n.ss $t(i)), ${q}ss $t $f $n ${q}+i.toString) " )
7272 if (nojname(n))
73- pr( s " check(z, $o. $f(x. $n.zs $t(i)), ${q}zs $t $f $n ${q}+i.toString) " )
73+ pr( s " check(z, $o. $f(x. $n.zs $t(i)), ${q}zs $t $f $n ${q}+i.toString) " )
7474 }
7575 if (parname(n) && pf.isDefined) {
76- pr( s " check(z, $o. $f(x. $n.sp $t(i)), ${q}sp $t $f $n ${q}+i.toString) " )
76+ pr( s " check(z, $o. $f(x. $n.sp $t(i)), ${q}sp $t $f $n ${q}+i.toString) " )
7777 if (nojname(n))
78- pr( s " check(z, $o. $f(x. $n.zp $t(i)), ${q}zp $t $f $n ${q}+i.toString) " )
78+ pr( s " check(z, $o. $f(x. $n.zp $t(i)), ${q}zp $t $f $n ${q}+i.toString) " )
7979 }
80- pr( s " } " )
80+ pr( s " } " )
8181 }
8282 }
83- pr( s " } // End scope for operations $o collection $n" )
83+ pr( s " } // End scope for operations $o collection $n" )
8484 }
8585 }
86- pr( """ wrong.foreach(println)""" )
87- pr( """ if (wrong.nonEmpty) sys.exit(1) """ )
88- pr( """ }""" )
89- pr( """ }""" )
86+ pr( """ wrong.foreach(println)""" )
87+ pr( """ if (wrong.nonEmpty) sys.exit(1) """ )
88+ pr( """ }""" )
89+ pr( """ }""" )
90+ } match {
91+ case Left (t) => println(" Did not successfully write file: " + target.getPath); throw t
92+ case _ =>
93+ }
94+ }
95+
96+ def quickBenchWithThyme (target : java.io.File , sizes : Option [Array [Int ]]) {
97+ val q = " \" "
98+ if (target.exists) throw new java.io.IOException (" Generator will not write to existing file: " + target.getPath)
99+ writeTo(target){ pr =>
100+ pr( """ package bench.test""" )
101+ pr( """ """ )
102+ pr( """ import bench.generate._, bench.operate._, bench.generate.EnableIterators._""" )
103+ pr( """ import scala.compat.java8.StreamConverters._""" )
104+ pr( """ import ichi.bench.Thyme""" )
105+ pr( """ """ )
106+ pr( """ object Agreement {""" )
107+ pr( """ def run() {""" )
108+ pr( """ val th = Thyme.warmed()""" )
109+ pr( s " val m = (new bench.generate.Things( ${sayArrayI(sizes)})).N; " )
110+ pr( """ def timings[A](x: bench.generate.Things, op: Int => A, name: String) {""" )
111+ pr( """ val ts = new collection.mutable.ArrayBuffer[(Double, Double, Double)]""" )
112+ pr( """ for (i <- 0 until m) {""" )
113+ pr( """ val b = Thyme.Benched.empty""" )
114+ pr( """ val a = th.bench(op(i))(b)""" )
115+ pr( """ if (a == null) ts += ((Double.NaN, Double.NaN, Double.NaN))""" )
116+ pr( """ else ts += ((b.runtime * 1e6, b.runtimeCI95._1 * 1e6, b.runtimeCI95._2 * 1e6)""" )
117+ pr( """ }""" )
118+ pr( """ val sb = new StringBuilder""" )
119+ pr( """ sb ++= name + $q: $q""" )
120+ pr( """ if (sb.length < 36) sb ++= $q $q * (36 - sb.length)""" )
121+ pr( """ ts.foreach{ case (c, lo, hi) =>""" )
122+ pr( """ sb ++= $q $q""" )
123+ pr( """ sb ++= ${q}12.4f${q}.format(c)""" )
124+ pr( """ sb ++= ${q}12.4f${q}.format(lo)""" )
125+ pr( """ sb ++= ${q}12.4f${q}.format(hi)""" )
126+ pr( """ }""" )
127+ pr( """ println(sb.result)""" )
128+ pr( """ }""" )
129+ allops.foreach{ case (o, t, fs) =>
130+ names.foreach{ n =>
131+ pr( s " { // Scope for operations $o collection $n" )
132+ pr( s " val x = new bench.generate.Things( ${sayArrayI(sizes)}) " )
133+ parsefs(fs).foreach{ case (f, pf, ord) =>
134+ if (ordname(n) || ! ord) {
135+ if (nojname(n)) {
136+ pr( s " timings(x, i => $o. $f(x. $n.c $t(i)), ${q}c $t $f $n ${q}+i.toString) " );
137+ pr( s " timings(x, i => $o. $f(x. $n.i $t(i)), ${q}i $t $f $n ${q}+i.toString) " )
138+ }
139+ if (sqnname(n)) {
140+ pr( s " timings(x, i => $o. $f(x. $n.ss $t(i)), ${q}ss $t $f $n ${q}+i.toString) " )
141+ if (nojname(n))
142+ pr( s " timings(x, i => $o. $f(x. $n.zs $t(i)), ${q}zs $t $f $n ${q}+i.toString) " )
143+ }
144+ if (parname(n) && pf.isDefined) {
145+ pr( s " timings(x, i => $o. $f(x. $n.sp $t(i)), ${q}sp $t $f $n ${q}+i.toString) " )
146+ if (nojname(n))
147+ pr( s " timings(x, i => $o. $f(x. $n.zp $t(i)), ${q}zp $t $f $n ${q}+i.toString) " )
148+ }
149+ pr( s " } " )
150+ }
151+ }
152+ pr( s " } // End scope for operations $o collection $n" )
153+ }
154+ }
155+ pr( """ }""" )
156+ pr( """ }""" )
90157 } match {
91158 case Left (t) => println(" Did not successfully write file: " + target.getPath); throw t
92159 case _ =>
0 commit comments