@@ -4,7 +4,9 @@ import scala.util._
44import scala .util .control .NonFatal
55
66object Generator {
7- val names = " arr ish lst ils que stm trs vec arb ars ast mhs lhs prq muq wra jix jln" .split(' ' )
7+ val annotated = " arr ish lst* ils* que* stm* trs* vec arb ars ast* mhs lhs* prq* muq* wra jix jln" .split(' ' )
8+ val names = annotated.map(_.takeWhile(_.isLetter))
9+ val nojnames = names.filterNot(_ startsWith " j" )
810
911 def writeTo (f : java.io.File )(pr : (String => Unit ) => Unit ): Either [Throwable , Unit ] = {
1012 try {
@@ -20,15 +22,39 @@ object Generator {
2022 def sayArrayI (oa : Option [Array [Int ]]) = oa match { case Some (a) => a.mkString(" Array(" , " ," , " )" ); case _ => " " }
2123
2224 def agreement (target : java.io.File , sizes : Option [Array [Int ]] = None ) {
25+ val q = " \" "
2326 if (target.exists) throw new java.io.IOException (" Generator will not write to existing file: " + target.getPath)
2427 writeTo(target){ pr =>
2528 pr(""" package bench.test""" )
2629 pr(""" """ )
30+ pr(""" import bench.generate._, bench.operate._, bench.generate.EnableIterators._""" )
31+ pr(""" import scala.compat.java8.StreamConverters._""" )
32+ pr(""" """ )
2733 pr(""" object Agreement {""" )
2834 pr(""" def run() {""" )
2935 pr(""" val wrong = new collection.mutable.ArrayBuffer[String]""" )
30- pr(""" def check[A](a1: A, a2: A, msg: String) = if (a1 != a2) wrong += msg""" )
36+ pr(""" def check[A](a1: A, a2: => A, msg: String) {""" )
37+ pr(""" var t = System.nanoTime""" )
38+ pr(""" if (!CloseEnough(a1, { val ans = a2; t = System.nanoTime - t; ans})) wrong += msg""" )
39+ pr(""" if (t > 2000000000) wrong += "Slow " + msg""" )
40+ pr(""" }""" )
3141 pr( s " val x = new bench.generate.Things( ${sayArrayI(sizes)}) " )
42+ pr(""" for (i <- 0 until x.N) {""" )
43+ pr(""" val si = OnInt.sum(x.arr.cI(i))""" )
44+ nojnames.tail.foreach{ n =>
45+ pr( s " check(si, OnInt.sum(x. $n.cI(i)), ${q}cI sum $n ${q}+i.toString) " )
46+ }
47+ nojnames.foreach{ n =>
48+ pr( s " check(si, OnInt.sum(x. $n.iI(i)), ${q}iI sum $n ${q}+i.toString) " )
49+ }
50+ annotated.foreach{ m =>
51+ val n = m.takeWhile(_.isLetter)
52+ val c = if (m contains " *" ) " ssI" else " spI"
53+ pr( s " check(si, OnInt.sum(x. $n. $c(i)), ${q}$c sum $n ${q}+i.toString) " )
54+ }
55+ pr( s " } " )
56+ pr(""" wrong.foreach(println)""" )
57+ pr(""" if (wrong.nonEmpty) sys.exit(1) """ )
3258 pr(""" }""" )
3359 pr(""" }""" )
3460 } match {
0 commit comments