1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 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;
}
}
//############################################################################
|