diff options
author | Gilles Dubochet <gilles.dubochet@epfl.ch> | 2005-12-16 18:20:15 +0000 |
---|---|---|
committer | Gilles Dubochet <gilles.dubochet@epfl.ch> | 2005-12-16 18:20:15 +0000 |
commit | 17e2b1c2a6f69ba74e79c30d1e44195fe732e3e3 (patch) | |
tree | bb804b4038eb6d0dee58b77cea8bd2dcc6f42dc4 /test/files/run/Course-2002-08.scala | |
parent | e70a1a24ef7a7b596a92e1853fd44e96f36ad245 (diff) | |
download | scala-17e2b1c2a6f69ba74e79c30d1e44195fe732e3e3.tar.gz scala-17e2b1c2a6f69ba74e79c30d1e44195fe732e3e3.tar.bz2 scala-17e2b1c2a6f69ba74e79c30d1e44195fe732e3e3.zip |
Removed old scala tests from new Scala core mod...
Removed old scala tests from new Scala core module.
Diffstat (limited to 'test/files/run/Course-2002-08.scala')
-rw-r--r-- | test/files/run/Course-2002-08.scala | 602 |
1 files changed, 0 insertions, 602 deletions
diff --git a/test/files/run/Course-2002-08.scala b/test/files/run/Course-2002-08.scala deleted file mode 100644 index 7e06001732..0000000000 --- a/test/files/run/Course-2002-08.scala +++ /dev/null @@ -1,602 +0,0 @@ -//############################################################################ -// Programmation IV - 2002 - Week 08 -//############################################################################ -// $Id$ - -import List._; - -object M0 { - - var x: String = "abc"; - var count = 111; - - def test = { - Console.println("x = " + x); - Console.println("count = " + count); - x = "hello"; - count = count + 1; - Console.println("x = " + x); - Console.println("count = " + count); - Console.println; - } -} - -//############################################################################ - -object M1 { - - class BankAccount() { - private var balance = 0; - def deposit(amount: Int): Unit = - if (amount > 0) balance = balance + amount; - - def withdraw(amount: Int): Int = - if (0 < amount && amount <= balance) { - balance = balance - amount; - balance - } else error("insufficient funds"); - } - - def test0 = { - val account = new BankAccount(); - Console.print("account deposit 50 -> "); - Console.println((account deposit 50).toString()); // !!! .toString - Console.print("account withdraw 20 -> "); - Console.println(account withdraw 20); - Console.print("account withdraw 20 -> "); - Console.println(account withdraw 20); - Console.print("account withdraw 15 -> "); - Console.println; - } - - def test1 = { - val x = new BankAccount(); - val y = new BankAccount(); - Console.print("x deposit 30 -> "); - Console.println((x deposit 30).toString()); // !!! .toString - Console.print("y withdraw 20 -> "); - Console.println; - } - - def test2 = { - val x = new BankAccount(); - val y = new BankAccount(); - Console.print("x deposit 30 -> "); - Console.println((x deposit 30).toString()); // !!! .toString - Console.print("x withdraw 20 -> "); - Console.println(x withdraw 20); - } - - def test3 = { - val x = new BankAccount(); - val y = x; - Console.print("x deposit 30 -> "); - Console.println((x deposit 30).toString()); // !!! .toString - Console.print("y withdraw 20 -> "); - Console.println(y withdraw 20); - } - - def test = { - test0; Console.println; - test1; Console.println; - test2; Console.println; - test3; Console.println; - } -} - - -//############################################################################ - -object M2 { - - def While(condition: => Boolean)(command: => Unit): Unit = - if (condition) { - command; While(condition)(command) - } else { - } - - def power (x: Double, exp: Int): Double = { - var r = 1.0; - var i = exp; - While (i > 0) { r = r * x; i = i - 1 } - r - } - - def test = { - Console.println("2^0 = " + power(2,0)); - Console.println("2^1 = " + power(2,1)); - Console.println("2^2 = " + power(2,2)); - Console.println("2^3 = " + power(2,3)); - Console.println; - } -} - -//############################################################################ - -object M3 { - - def power (x: Double, exp: Int): Double = { - var r = 1.0; - var i = exp; - while (i > 0) { r = r * x; i = i - 1 } - r - } - - def test = { - Console.println("2^0 = " + power(2,0)); - Console.println("2^1 = " + power(2,1)); - Console.println("2^2 = " + power(2,2)); - Console.println("2^3 = " + power(2,3)); - Console.println; - } -} - -//############################################################################ - -object M4 { - - def test = { - for (val i <- range(1, 4)) { Console.print(i + " ") }; - Console.println; - Console.println(for (val i <- range(1, 4)) yield i); - Console.println; - } -} - -//############################################################################ - -object M5 { - - type Action = () => Unit; - - class Wire() { - private var sigVal = false; - private var actions: List[Action] = List(); - def getSignal = sigVal; - def setSignal(s: Boolean) = - if (s != sigVal) { - sigVal = s; - actions.foreach(action => action()); - } - def addAction(a: Action) = { - actions = a :: actions; a() - } - } - - abstract class Simulation() { - private type Agenda = List[Pair[Int, Action]]; - private var agenda: Agenda = List(); - private var curtime = 0; - def currentTime: Int = curtime; - - def afterDelay(delay: Int)(action: Action): Unit = { - def insert(ag: Agenda, time: Int): Agenda = ag match { - case List() => - List(Pair(time, action)) - case Pair(t, act) :: ag1 => - if (time < t) Pair(time, action) :: ag - else Pair(t, act) :: insert(ag1, time) - } - agenda = insert(agenda, curtime + delay) - } - - private def next: Unit = agenda match { - case List() => () - case Pair(time, action) :: ag1 => { - agenda = ag1; - curtime = time; - action(); - } - } - - def run: Unit = { - afterDelay(0){() => Console.println("*** simulation started ***"); } - while (!agenda.isEmpty) { next } - } - } - - abstract class BasicCircuitSimulation() extends Simulation() { - - val InverterDelay: Int; - val AndGateDelay: Int; - val OrGateDelay: Int; - - def inverter(input: Wire, output: Wire): Unit = { - def invertAction() = { - val inputSig = input.getSignal; - afterDelay(InverterDelay) {() => output.setSignal(!inputSig) }; - } - input addAction invertAction - } - - def andGate(a1: Wire, a2: Wire, output: Wire): Unit = { - def andAction() = { - val a1Sig = a1.getSignal; - val a2Sig = a2.getSignal; - afterDelay(AndGateDelay) {() => output.setSignal(a1Sig & a2Sig) }; - } - a1 addAction andAction; - a2 addAction andAction; - } - - def orGate(o1: Wire, o2: Wire, output: Wire): Unit = { - def orAction() = { - val o1Sig = o1.getSignal; - val o2Sig = o2.getSignal; - afterDelay(OrGateDelay) {() => output.setSignal(o1Sig | o2Sig) }; - } - o1 addAction orAction; - o2 addAction orAction; - } - - def probe(name: String, wire: Wire): Unit = { - wire addAction {() => - Console.println( - name + " " + currentTime + " new-value = " + wire.getSignal); - } - } - } - - abstract class CircuitSimulation() extends BasicCircuitSimulation() { - - def halfAdder(a: Wire, b: Wire, s: Wire, c: Wire): Unit = { - val d = new Wire(); - val e = new Wire(); - orGate(a, b, d); - andGate(a, b, c); - inverter(c, e); - andGate(d, e, s); - } - - def fullAdder(a: Wire, b: Wire, cin: Wire, sum: Wire, cout: Wire): Unit = { - val s = new Wire(); - val c1 = new Wire(); - val c2 = new Wire(); - halfAdder(a, cin, s, c1); - halfAdder(b, s, sum, c2); - orGate(c1, c2, cout); - } - } - - class Test() extends CircuitSimulation() { - - val InverterDelay = 1; - val AndGateDelay = 3; - val OrGateDelay = 5; - - def invert = { - val ain = new Wire(); - val cout = new Wire(); - inverter(ain, cout); - - def result = if (cout.getSignal) 1 else 0; - - def test(a: Int) = { - ain setSignal (if (a == 0) false else true); - run; - Console.println("!" + a + " = " + result); - Console.println; - } - - probe("out ", cout); - - test(0); - test(1); - } - - def and = { - val ain = new Wire(); - val bin = new Wire(); - val cout = new Wire(); - andGate(ain, bin, cout); - - def result = if (cout.getSignal) 1 else 0; - - def test(a: Int, b: Int) = { - ain setSignal (if (a == 0) false else true); - bin setSignal (if (b == 0) false else true); - run; - Console.println(a + " & " + b + " = " + result); - Console.println; - } - - probe("out ", cout); - Console.println; - - test(0,0); - test(0,1); - test(1,0); - test(1,1); - } - - def or = { - val ain = new Wire(); - val bin = new Wire(); - val cout = new Wire(); - orGate(ain, bin, cout); - - def result = if (cout.getSignal) 1 else 0; - - def test(a: Int, b: Int) = { - ain setSignal (if (a == 0) false else true); - bin setSignal (if (b == 0) false else true); - run; - Console.println(a + " | " + b + " = " + result); - Console.println; - } - - probe("out ", cout); - Console.println; - - test(0,0); - test(0,1); - test(1,0); - test(1,1); - } - - def half = { - val ain = new Wire(); - val bin = new Wire(); - val sout = new Wire(); - val cout = new Wire(); - halfAdder(ain, bin, sout, cout); - - def result = - (if (sout.getSignal) 1 else 0) + - (if (cout.getSignal) 2 else 0); - - def test(a: Int, b: Int) = { - ain setSignal (if (a == 0) false else true); - bin setSignal (if (b == 0) false else true); - run; - Console.println(a + " + " + b + " = " + result); - Console.println; - } - - probe("sum ", sout); - probe("carry", cout); - Console.println; - - test(0,0); - test(0,1); - test(1,0); - test(1,1); - } - - def full = { - val ain = new Wire(); - val bin = new Wire(); - val cin = new Wire(); - val sout = new Wire(); - val cout = new Wire(); - fullAdder(ain, bin, cin, sout, cout); - - def result = - (if (sout.getSignal) 1 else 0) + - (if (cout.getSignal) 2 else 0); - - def test(a: Int, b: Int, c: Int) = { - ain setSignal (if (a == 0) false else true); - bin setSignal (if (b == 0) false else true); - cin setSignal (if (c == 0) false else true); - run; - Console.println(a + " + " + b + " + " + c + " = " + result); - Console.println; - } - - probe("sum ", sout); - probe("carry", cout); - Console.println; - - test(0,0,0); - test(0,0,1); - test(0,1,0); - test(0,1,1); - test(1,0,0); - test(1,0,1); - test(1,1,0); - test(1,1,1); - } - } - - def test = { - val sim = new Test(); - sim.invert; - sim.and; - sim.or; - sim.half; - sim.full; - } -} - -//############################################################################ - -class Simulator() { - - type Action = () => Unit; - type Agenda = List[Pair[Int, Action]]; - - private var agenda: Agenda = List(); - private var curtime = 0; - - def afterDelay(delay: Int)(action: Action) = { - def insert(ag: Agenda, time: Int): Agenda = ag match { - case List() => - List(Pair(time, action)) - case Pair(t, act) :: ag1 => - if (time < t) Pair(time, action) :: ag - else Pair(t, act) :: insert(ag1, time) - } - agenda = insert(agenda, curtime + delay) - } - - def next: Unit = agenda match { - case List() => () - case Pair(time, action) :: rest => { - agenda = rest; - curtime = time; - action(); - } - } - - protected def currentTime: Int = curtime; - - def run = { - afterDelay(0){() => Console.println("*** simulation started ***"); } - while (!agenda.isEmpty) { next } - } -} - -class Wire() { - private var sigVal = false; - private var actions: List[() => Unit] = List(); - def getSignal = sigVal; - def setSignal(s: Boolean) = - if (s != sigVal) { - sigVal = s; - actions.foreach(action => action()); - } - def addAction(a: () => Unit) = { - actions = a :: actions; - a() - } -} - -abstract class BasicCircuitSimulator() extends Simulator() { - - def probe(name: String, wire: Wire): Unit = { - wire addAction {() => - Console.println( - name + " " + currentTime + " new-value = " + wire.getSignal); - } - } - - val InverterDelay: Int; - val AndGateDelay: Int; - val OrGateDelay: Int; - - def inverter(input: Wire, output: Wire) = { - def invertAction() = { - val inputSig = input.getSignal; - afterDelay(InverterDelay) {() => output.setSignal(!inputSig) }; - } - input addAction invertAction - } - - def andGate(a1: Wire, a2: Wire, output: Wire) = { - def andAction() = { - val a1Sig = a1.getSignal; - val a2Sig = a2.getSignal; - afterDelay(AndGateDelay) {() => output.setSignal(a1Sig & a2Sig) }; - } - a1 addAction andAction; - a2 addAction andAction - } - - def orGate(a1: Wire, a2: Wire, output: Wire) = { - def orAction() = { - val a1Sig = a1.getSignal; - val a2Sig = a2.getSignal; - afterDelay(OrGateDelay) {() => output.setSignal(a1Sig | a2Sig) }; - } - a1 addAction orAction; - a2 addAction orAction - } - - def orGate2(a1: Wire, a2: Wire, output: Wire) = { - val w1 = new Wire(); - val w2 = new Wire(); - val w3 = new Wire(); - inverter(a1, w1); - inverter(a2, w2); - andGate(w1, w2, w3); - inverter(w3, output); - } -} - -abstract class CircuitSimulator() extends BasicCircuitSimulator() { - def demux2(in: Wire, ctrl: List[Wire], out: List[Wire]) : Unit = { - val ctrlN = ctrl.map(w => { val iw = new Wire(); inverter(w,iw); iw}); - val w0 = new Wire(); - val w1 = new Wire(); - val w2 = new Wire(); - val w3 = new Wire(); - - andGate(in, ctrl(1), w3); - andGate(in, ctrl(1), w2); - andGate(in, ctrlN(1), w1); - andGate(in, ctrlN(1), w0); - - andGate(w3, ctrl(0), out(3)); - andGate(w2, ctrlN(0), out(2)); - andGate(w1, ctrl(0), out(1)); - andGate(w0, ctrlN(0), out(0)); - } - - def connect(in: Wire, out: Wire) = { - in addAction {() => out.setSignal(in.getSignal); } - } - - def demux(in: Wire, ctrl: List[Wire], out: List[Wire]): Unit = ctrl match { - case List() => connect(in, out.head); - case c :: rest => - val c_ = new Wire(); - val w1 = new Wire(); - val w2 = new Wire(); - inverter(c, c_); - andGate(in, c_, w1); - andGate(in, c, w2); - demux(w1, rest, out.drop(out.length / 2)); - demux(w2, rest, out.take(out.length / 2)); - } -} - -class Main() extends CircuitSimulator() { - - val InverterDelay = 1; - val AndGateDelay = 3; - val OrGateDelay = 5; - - def main = { - val n = 3; - val outNum = 1 << n; - - val in = new Wire(); - val ctrl = for (val x <- range(0,n)) yield { new Wire() }; - val out = for (val x <- range(0,outNum)) yield { new Wire() }; - - demux(in, ctrl.reverse, out.reverse); - - probe("in", in); - for (val Pair(x,c) <- range(0,n) zip ctrl) { probe("ctrl" + x, c) } - for (val Pair(x,o) <- range(0,outNum) zip out) { probe("out" + x, o) } - - in.setSignal(true); - run; - ctrl(0).setSignal(true); - run; - ctrl(1).setSignal(true); - run; - ctrl(2).setSignal(true); - run; - ctrl(0).setSignal(false); - run; - } -} - -//############################################################################ - -object Test { - def main(args: Array[String]): Unit = { - M0.test; - M1.test; - M2.test; - M3.test; - M4.test; - M5.test; - new Main().main; - () - } -} - -//############################################################################ |