diff options
Diffstat (limited to 'tests/pending/run/enums.scala')
-rw-r--r-- | tests/pending/run/enums.scala | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/tests/pending/run/enums.scala b/tests/pending/run/enums.scala new file mode 100644 index 000000000..3aad7ec32 --- /dev/null +++ b/tests/pending/run/enums.scala @@ -0,0 +1,161 @@ +//############################################################################ +// Enumerations +//############################################################################ + +object Test1 { + + object WeekDays extends Enumeration { + val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value + } + + def isWorkingDay(d: WeekDays.Value) = + ! (d == WeekDays.Sat || d == WeekDays.Sun); + + def run: Int = { + val it = WeekDays.values filter (isWorkingDay); + it.toList.length + } +} + +object Test2 { + + object ThreadState extends Enumeration { + val New = Value("NEW"); + val Runnable = Value("RUNNABLE"); + val Blocked = Value("BLOCKED"); + val Waiting = Value("WAITING"); + val TimedWaiting = Value("TIMED_WAITING"); + val Terminated = Value("TERMINATED"); + } + + def run: Int = { + val it = for (s <- ThreadState.values; if s.id != 0) yield s; + it.toList.length + } +} + +object Test3 { + + object Direction extends Enumeration { + val North = Value("North") + val South = Value("South") + val East = Value("East") + val West = Value("West") + } + + def run: Int = { + val it = for (d <- Direction.values; if d.toString() startsWith "N") yield d; + it.toList.length + } +} + +object Test4 { + + object Direction extends Enumeration { + val North = Value("North") + val South = Value("South") + val East = Value("East") + val West = Value("West") + } + + def run: Int = { + val dir = Direction.withName("North") + assert(dir.toString == "North") + try { + Direction.withName("Nord") + assert(false) + } catch { + case e: Exception => /* do nothing */ + } + 0 + } +} + +object Test5 { + + object D1 extends Enumeration(0) { + val North, South, East, West = Value; + } + + object D2 extends Enumeration(-2) { + val North, South, East, West = Value; + } + + object WeekDays extends Enumeration { + val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value + } + + def run { + val s1 = D1.ValueSet(D1.North, D1.East) + val s2 = D2.North + D2.East + println(s1) + println(s2) + println(s1 + D1.West) + println(s2 + D2.West) + println(s1.toBitMask.map(_.toBinaryString).toList) + println(s2.toBitMask.map(_.toBinaryString).toList) + println(D1.ValueSet.fromBitMask(s1.toBitMask)) + println(D2.ValueSet.fromBitMask(s2.toBitMask)) + println(WeekDays.values.range(WeekDays.Tue, WeekDays.Sat)) + } +} + +object SerializationTest { + object Types extends Enumeration { val X, Y = Value } + class A extends java.io.Serializable { val types = Types.values } + class B extends java.io.Serializable { val types = Set(Types.X, Types.Y) } + + def serialize(obj: AnyRef) = { + val baos = new java.io.ByteArrayOutputStream() + val oos = new java.io.ObjectOutputStream(baos) + oos.writeObject(obj) + oos.close() + val bais = new java.io.ByteArrayInputStream(baos.toByteArray) + val ois = new java.io.ObjectInputStream(bais) + val prime = ois.readObject() + ois.close() + prime + } + + def run { + serialize(new B()) + serialize(new A()) + } +} + +//############################################################################ +// Test code + +object Test { + + def check_success(name: String, closure: => Int, expected: Int): Unit = { + Console.print("test " + name); + try { + val actual: Int = closure; + if (actual == expected) { + Console.print(" was successful"); + } else { + Console.print(" failed: expected "+ expected +", found "+ actual); + } + } catch { + case exception: Throwable => { + Console.print(" raised exception " + exception); + exception.printStackTrace(); + } + } + Console.println; + } + + def main(args: Array[String]): Unit = { + check_success("Test1", Test1.run, 5); + check_success("Test2", Test2.run, 5); + check_success("Test3", Test3.run, 1); + check_success("Test4", Test4.run, 0); + Console.println; + Test5.run; + Console.println; + SerializationTest.run; + } +} + +//############################################################################ |