scala/ex.scala
author Christian Urban <christian dot urban at kcl dot ac dot uk>
Thu, 25 Apr 2013 21:37:05 +0100
changeset 240 696081f445c2
parent 239 ac3309722536
child 269 fa40fd8abb54
permissions -rw-r--r--
added improved Recsursive function theory (not yet finished)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     1
import lib._
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     2
import turing._
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     3
import abacus._
195
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 194
diff changeset
     4
import recs._
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     5
import comp1._
205
c7975ab7c52e corrected scala compiler from recs to abacus
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 201
diff changeset
     6
import comp2._
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     7
239
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
     8
val Lg = {
240
696081f445c2 added improved Recsursive function theory (not yet finished)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 239
diff changeset
     9
  val lgR = Le o (Power o (Id(3, 1), Id(3, 2)), Id(3, 0))
696081f445c2 added improved Recsursive function theory (not yet finished)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 239
diff changeset
    10
  val conR1 = Conj o (Less o (Const(1) o (Id(2, 0), Id(2, 0))), 
239
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
    11
                     Less o (Const(1) o (Id(2, 0), Id(2, 1))))
240
696081f445c2 added improved Recsursive function theory (not yet finished)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 239
diff changeset
    12
  val conR2 = Not o (conR1)
696081f445c2 added improved Recsursive function theory (not yet finished)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 239
diff changeset
    13
  Add o (recs.Mult o (conR1, Maxr(lgR) o (Id(2, 0), Id(2, 1), Id(2, 0))), 
696081f445c2 added improved Recsursive function theory (not yet finished)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 239
diff changeset
    14
         recs.Mult o (conR2, Const(0) o (Id(2, 0)))) 
239
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
    15
}
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
    16
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
    17
222
d682591c63e1 better printing of register programs in Scala
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 221
diff changeset
    18
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    19
// Turing machine examples
194
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    20
val TMCopy = TM((WBk, 5), (R, 2), (R, 3), (R, 2), (WOc, 3), 
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    21
                (L, 4), (L, 4), (L, 5), (R, 11), (R, 6), 
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    22
                (R, 7), (WBk, 6), (R, 7), (R, 8), (WOc, 9), 
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    23
                (R, 8), (L, 10), (L, 9), (L, 10), (L, 5), 
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    24
                (L, 0), (R, 12), (WOc, 13), (L, 14), (R, 12), 
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    25
                (R, 12), (L, 15), (WBk, 14), (R, 0), (L, 15))
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    26
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    27
println("TMCopy:    " + (TMCopy.run(Tape(3))))
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    28
println("TMfindnth: " + (TMFindnth(3).run(Tape(1,2,3,4,5))))
194
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    29
println("TMMopup:   " + (TMMopup(3).run(Tape(1,2,3,4,5))))
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    30
210
5e2e576fac7c tuned abacus to turing compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 209
diff changeset
    31
println("TMCopyMop: " + ((TMCopy :+ TMMopup(0))))
5e2e576fac7c tuned abacus to turing compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 209
diff changeset
    32
println("TMCopyMop: " + ((TMCopy :+ TMMopup(1)).run(Tape(3))))
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    33
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    34
// Abacus machine examples
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    35
def Copy(in: Int, out: Int, jump: Int) = 
200
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    36
  Abacus(Dec(in, jump), Inc(out), Goto(0)) 
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    37
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    38
def Plus(m: Int, n: Int, tmp: Int, jump: Int) =
200
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    39
  Abacus(Dec(m, 4), Inc(n), Inc(tmp), Goto(0), Dec(tmp, jump), Inc(m), Goto(4))
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    40
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    41
def Mult(in1: Int, in2: Int, out: Int, tmp: Int, jump: Int) = 
200
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    42
  Abacus(Dec(in1, jump)) ++ Plus(in2, out, tmp, -1).shift(1, -1).adjust(-1, 0)
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    43
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    44
def Expo(in1: Int, in2: Int, out: Int, tmp1: Int, tmp2: Int, jump: Int) = {
200
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    45
  Abacus(Inc(out), Dec(in1, jump)) ++ 
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    46
  Mult(out, in2, tmp2, tmp1, -1).shift(2, -1).adjust(-1, 10) ++
200
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    47
  Copy(tmp2, out, -1).shift(10, -1).adjust(-1, 1)
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    48
}
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    49
194
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    50
println("Copy 3:     " + (Copy(0, 1, -1).run(Map(0 -> 3, 1 -> 0))))
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    51
println("Plus 3 + 4: " + (Plus(0, 1, 2, -1).run(Map(0 -> 3, 1 -> 4, 2 -> 0))))
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    52
println("Mult 3 * 5: " + (Mult(0, 1, 2, 3, -1).run(Map(0 -> 3, 1 -> 5, 2 -> 0, 3 -> 0))))
fc2a5e9fbb97 updated Scala files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 193
diff changeset
    53
println("Expo 3 ^ 4: " + (Expo(0, 1, 2, 3, 4, -1).run(Map(0 -> 4, 1 -> 3, 2 -> 0, 3 -> 0, 4 -> 0))))
193
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    54
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    55
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    56
// Abacus-to-TM translation examples
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    57
println("Compiled Copy 3:     " + toTM(Copy(0, 1, Int.MaxValue).p).run(Tape(3,0,0)))
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    58
println("Compiled Plus 3 + 4: " + toTM(Plus(0, 1, 2, Int.MaxValue).p).run(Tape(3,4,0,0)))
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    59
println("Compiled Mult 3 * 5: " + toTM(Mult(0, 1, 2, 3, Int.MaxValue).p).run(Tape(3,5,0,0)))
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    60
println("Compiled Expo 3 ^ 4: " + toTM(Expo(0, 1, 2, 3, 4, 10000).p).run(Tape(3,4,0,0,0)))
317a2532c567 split up scala-file into separate components
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    61
200
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    62
// Recursive function examples 
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    63
println("Add 3 4:   " + Add.eval(3, 4))
201
09befdf4fc99 syntactic convenience for recursive functions
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 200
diff changeset
    64
println("Mult 3 4:  " + recs.Mult.eval(3, 4))
200
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    65
println("Twice 4:   " + Twice.eval(4))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    66
println("FourTm 4:  " + Fourtimes.eval(4))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    67
println("Pred 9:    " + Pred.eval(9))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    68
println("Pred 0:    " + Pred.eval(0))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    69
println("Minus 6 2: " + Minus.eval(6, 2))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    70
println("Minus 6 8: " + Minus.eval(6, 8))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    71
println("Const 8:   " + Const(8).eval(67))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    72
println("Power 2 3: " + Power.eval(2, 3))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    73
println("Sign 8:    " + Sign.eval(8))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    74
println("Sign 0:    " + Sign.eval(0))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    75
println("Less 4 4:  " + Less.eval(4, 4))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    76
println("Less 4 6:  " + Less.eval(4, 6))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    77
println("Less 6 4:  " + Less.eval(6, 4))
239
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
    78
println("Le 4 4:    " + recs.Le.eval(4, 4))
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
    79
println("Le 4 6:    " + recs.Le.eval(4, 6))
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
    80
println("Le 6 4:    " + recs.Le.eval(6, 4))
200
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    81
println("Not 0:     " + Not.eval(0))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    82
println("Not 6:     " + Not.eval(6))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    83
println("Eq 4 4:    " + Eq.eval(4, 4))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    84
println("Eq 4 6:    " + Eq.eval(4, 6))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    85
println("Eq 6 4:    " + Eq.eval(6, 4))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    86
println("Conj 0 6:  " + Conj.eval(0, 6))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    87
println("Conj 6 4:  " + Conj.eval(6, 4))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    88
println("Conj 0 0:  " + Conj.eval(0, 0))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    89
println("Disj 0 6:  " + Disj.eval(0, 6))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    90
println("Disj 6 4:  " + Disj.eval(6, 4))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    91
println("Disj 0 0:  " + Disj.eval(0, 0))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    92
println("Sigma Add 2 3 -> 14:  " + Sigma(Add).eval(2,3))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    93
println("Accum Add 2 3 -> 120: " + Accum(Add).eval(2,3))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    94
println("Accum Mult 2 3 -> 0:  " + Accum(recs.Mult).eval(2,3))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    95
println("Fact 5:  " + Fact.eval(5))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    96
println("Prime 0..15: " + (0 to 15).map(n => (n, Prime.eval(n))))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    97
println("NextPrime 3: " + NextPrime.eval(3))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    98
println("NthPrime 1:  " + NthPrime.eval(1))
8dde2e46c69d added all recursive functions needed for the UF
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 198
diff changeset
    99
println("Listsum [2, 3, 4 , 5, 6]: " + Listsum(5, 4).eval(2, 3, 4, 5, 6))
239
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
   100
println("Strt:  " + Strt(2).eval(2, 3))
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
   101
println("(<=5) 1: " + (Less o (Id(1, 0), Const(5))).eval(1))
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
   102
println("(<=5) 5: " + (Less o (Id(1, 0), Const(5))).eval(5))
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
   103
println("(<=5) 6: " + (Less o (Id(1, 0), Const(5))).eval(6))
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
   104
println("Max (<=9): " + Maxr(Le o (Id(1, 0), Const(9))).eval(10))
ac3309722536 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 226
diff changeset
   105
println("Max (>=9): " + Maxr(Le o (Const(9), Id(1, 0))).eval(8))
240
696081f445c2 added improved Recsursive function theory (not yet finished)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 239
diff changeset
   106
println("test")
696081f445c2 added improved Recsursive function theory (not yet finished)
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 239
diff changeset
   107
println("Lg 4 2: " + Lg.eval(4, 2))
208
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   108
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   109
// compilation of rec to abacus tests
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   110
def test_comp2(f: Rec, ns: Int*) = {
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   111
  val (abc_f, arity, _) = compile_rec(f)
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   112
  val abc_map = (0 until ns.length).zip(ns).toMap[Int, Int]
221
18905d086cbb some peephole optimisations in the scala code
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 210
diff changeset
   113
  val start = System.nanoTime()
208
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   114
  val res = (abc_f.run(abc_map))(arity)
221
18905d086cbb some peephole optimisations in the scala code
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 210
diff changeset
   115
  val end = System.nanoTime()
18905d086cbb some peephole optimisations in the scala code
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 210
diff changeset
   116
  val time = (end - start)/1.0e9
226
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 225
diff changeset
   117
  ("Result: " + res + "  length: " + abc_f.p.length + " time: " + "%.5f".format(time))
208
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   118
}
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   119
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   120
println("S(3)          " + test_comp2(S, 3))
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   121
println("Const(1)      " + test_comp2(Const(1), 0))
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   122
println("Const(10)     " + test_comp2(Const(10), 0))
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   123
println("Add(69, 30)   " + test_comp2(Add, 69, 30))
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   124
println("Mult(13, 9)   " + test_comp2(recs.Mult, 13, 9))
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   125
println("Power(3, 4)   " + test_comp2(Power, 3, 4))
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   126
println("Minus(30, 4)  " + test_comp2(Minus, 30, 4))
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   127
println("Fact(5)       " + test_comp2(Fact, 5))
221
18905d086cbb some peephole optimisations in the scala code
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 210
diff changeset
   128
println("Prime(5)      " + test_comp2(Prime, 5))
209
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   129
//println("Prime(4)      " + test_comp2(Prime, 4))
208
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   130
println("Strt(1)(2)    " + test_comp2(Strt(1), 2))
198
d93cc4295306 tuned some files
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 195
diff changeset
   131
195
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 194
diff changeset
   132
209
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   133
def test_comp1(f: Rec, ns: Int*) = {
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   134
  val (abc_f, arity, _) = compile_rec(f)
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   135
  val tm = toTM(abc_f.p) :+ TMMopup(arity)
221
18905d086cbb some peephole optimisations in the scala code
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 210
diff changeset
   136
  val start = System.nanoTime()
209
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   137
  val res = tm.run(Tape(ns.toList))
221
18905d086cbb some peephole optimisations in the scala code
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 210
diff changeset
   138
  val end = System.nanoTime()
18905d086cbb some peephole optimisations in the scala code
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 210
diff changeset
   139
  val time = (end - start)/1.0e9
18905d086cbb some peephole optimisations in the scala code
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 210
diff changeset
   140
  ("length: " + tm.p.length + " tape: " + arity + " time: " + "%.5f".format(time) + "\nResult: " + res)
209
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   141
}
205
c7975ab7c52e corrected scala compiler from recs to abacus
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 201
diff changeset
   142
209
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   143
println("")
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   144
println("S(3)          " + test_comp1(S, 3))
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   145
println("Const(10)     " + test_comp1(Const(10), 0))
b16dfc467b67 finished compliations
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
   146
println("Add(6, 3)     " + test_comp1(Add, 6, 3))
210
5e2e576fac7c tuned abacus to turing compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 209
diff changeset
   147
println("Mult(4, 5)    " + test_comp1(recs.Mult, 4, 5))
5e2e576fac7c tuned abacus to turing compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 209
diff changeset
   148
println("Fact(4)       " + test_comp1(Fact, 4))
208
3267acc1f97f added examples for the rec to abacus compilation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 207
diff changeset
   149