@@ -4,7 +4,9 @@ import scala.util._
4
4
import scala .util .control .NonFatal
5
5
6
6
object 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" )
8
10
9
11
def writeTo (f : java.io.File )(pr : (String => Unit ) => Unit ): Either [Throwable , Unit ] = {
10
12
try {
@@ -20,15 +22,39 @@ object Generator {
20
22
def sayArrayI (oa : Option [Array [Int ]]) = oa match { case Some (a) => a.mkString(" Array(" , " ," , " )" ); case _ => " " }
21
23
22
24
def agreement (target : java.io.File , sizes : Option [Array [Int ]] = None ) {
25
+ val q = " \" "
23
26
if (target.exists) throw new java.io.IOException (" Generator will not write to existing file: " + target.getPath)
24
27
writeTo(target){ pr =>
25
28
pr(""" package bench.test""" )
26
29
pr(""" """ )
30
+ pr(""" import bench.generate._, bench.operate._, bench.generate.EnableIterators._""" )
31
+ pr(""" import scala.compat.java8.StreamConverters._""" )
32
+ pr(""" """ )
27
33
pr(""" object Agreement {""" )
28
34
pr(""" def run() {""" )
29
35
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(""" }""" )
31
41
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) """ )
32
58
pr(""" }""" )
33
59
pr(""" }""" )
34
60
} match {
0 commit comments