aboutsummaryrefslogtreecommitdiff
path: root/tests/run/MutableListTest.scala
blob: 8efb8281db74aaff5a62f0671460a5db55721f32 (plain) (blame)
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: Unit = {
    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]): Unit = {
    testEmpty
    testAddElement
    testAddFewElements
    testAddMoreElements
    testTraversables
  }

  def testEmpty: Unit = {
    val mlist = new MutableList[Int]
    assert(mlist.isEmpty)
    assert(mlist.get(0) == None)
  }

  def testAddElement: Unit = {
    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: Unit = {
    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: Unit = {
    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: Unit = {
    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)
  }

}