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
|
import scala.collection.mutable.MutableList
class ExtList[T] extends MutableList[T] {
def printState {
println("Length: " + len)
println("Last elem: " + last0.elem)
println("First elem: " + first0.elem)
println("After first elem: " + first0.next.elem)
println("After first: " + first0.next)
println("Last: " + last0)
}
}
object Test {
def main(args: Array[String]) {
testEmpty
testAddElement
testAddFewElements
testAddMoreElements
testTraversables
}
def testEmpty {
val mlist = new MutableList[Int]
assert(mlist.isEmpty)
assert(mlist.get(0) == None)
}
def testAddElement {
val mlist = new MutableList[Int]
mlist += 17
assert(mlist.nonEmpty)
assert(mlist.length == 1)
assert(mlist.head == 17)
assert(mlist.last == 17)
assert(mlist(0) == 17)
assert(mlist.tail.isEmpty)
assert(mlist.tail.length == 0)
mlist(0) = 101
assert(mlist(0) == 101)
assert(mlist.toList == List(101))
assert(mlist.tail.get(0) == None)
assert((mlist.tail += 19).head == 19)
assert(mlist.tail.length == 0)
}
def testAddFewElements {
val mlist = new MutableList[Int]
for (i <- 0 until 2) mlist += i
// mlist.printState
for (i <- 0 until 2) assert(mlist(i) == i)
assert(mlist.length == 2)
assert(mlist.nonEmpty)
assert(mlist.tail.length == 1)
assert(mlist.tail.tail.length == 0)
assert(mlist.tail.tail.isEmpty)
}
def testAddMoreElements {
val mlist = new MutableList[Int]
for (i <- 0 until 10) mlist += i * i
assert(mlist.nonEmpty)
assert(mlist.length == 10)
for (i <- 0 until 10) assert(mlist(i) == i * i)
assert(mlist(5) == 5 * 5)
assert(mlist(9) == 9 * 9)
var sometail = mlist
for (i <- 0 until 10) {
assert(sometail.head == i * i)
sometail = sometail.tail
}
mlist(5) = -25
assert(mlist(5) == -25)
mlist(0) = -1
assert(mlist(0) == -1)
mlist(9) = -81
assert(mlist(9) == -81)
assert(mlist(5) == -25)
assert(mlist(0) == -1)
assert(mlist.last == -81)
mlist.clear
assert(mlist.isEmpty)
mlist += 1001
assert(mlist.head == 1001)
mlist += 9999
assert(mlist.tail.head == 9999)
assert(mlist.last == 9999)
}
def testTraversables {
val mlist = new MutableList[Int]
for (i <- 0 until 10) mlist += i * i
var lst = mlist.drop(5)
for (i <- 0 until 5) assert(lst(i) == (i + 5) * (i + 5))
lst = lst.take(3)
for (i <- 0 until 3) assert(lst(i) == (i + 5) * (i + 5))
lst += 129
assert(lst(3) == 129)
assert(lst.last == 129)
assert(lst.length == 4)
lst += 7
assert(lst.init.last == 129)
assert(lst.length == 5)
lst.clear
assert(lst.length == 0)
for (i <- 0 until 5) lst += i
assert(lst.reduceLeft(_ + _) == 10)
}
}
|