summaryrefslogtreecommitdiff
path: root/test/files/run/mutable-anyrefmap.scala
blob: ff615d0daf223116fef1228d146b7c021f04f672 (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
object Test extends App {

  import scala.collection.mutable.HashMap;
  import scala.collection.mutable.AnyRefMap;

  val keys = Array(
    null, "perch", "herring", "salmon", "pike", "cod", ""
  )

  val rn = new scala.util.Random(42L)
  var arm = AnyRefMap.empty[String, Int]
  val hm = HashMap.empty[String, Int]
  
  def checkConsistent = hm.forall{ case (k,v) => arm.get(k).exists(_ == v) }

  assert {
    (0 to 10000).forall{ i =>
      val k = keys(rn.nextInt(keys.length))
      if (rn.nextInt(100) < 2) arm = arm.clone()
      if (rn.nextInt(100) < 5) arm.repack()
      if (rn.nextBoolean) {
        hm += ((k, i))
        rn.nextInt(6) match {
          case 0 => arm += ((k, i))
          case 1 => arm += (k, i)
          case 2 => arm(k) = i
          case 3 => arm.put(k,i)
          case 4 => arm ++= List((k,i))
          case _ => if (!arm.contains(k)) arm.getOrElseUpdate(k,i) 
                    else arm += (k,i)
        }
      }
      else {
        hm -= k
        rn.nextInt(2) match {
          case 0 => arm -= k
          case _ => arm --= List(k)
        }
      }
      checkConsistent
    }
  }
  
  assert {
    val mapped = 
      arm.map{ case (k,v) => (if (k==null) "" else k+k) -> v.toString }
    mapped.getClass == arm.getClass
  }
  
  assert {
    val arm2 = new AnyRefMap[java.lang.Integer,Unit](2000000)
    for (i <- 0 until 1000000) arm2(java.lang.Integer.valueOf(i)) = ()
    
    arm2.size == 1000000 && 
      (0 to 1100000 by 100000).map(java.lang.Integer.valueOf).forall(i => (arm2 contains i) == i < 1000000)
  }
  
  arm = AnyRefMap("heron" -> 22, "dove" -> 5, "budgie" -> 0)
  
  assert{
    var s = ""
    arm.foreachKey(s += _)

    s.length == "herondovebudgie".length &&
    s.contains("heron") &&
    s.contains("dove") &&
    s.contains("budgie")
  }

  assert{ var s = 0L; arm.foreachValue(s += _); s == 27L }

  assert { 
    val m2 = arm.mapValuesNow(_+2)
    arm.transformValues(_+2)
    m2 == arm && !(m2 eq arm) && (for ((_,v) <- arm) yield v).sum == 33L
  }

  assert {
    val arm2 = new AnyRefMap[String, String](x => if (x==null) "null" else x)
    arm2 += ("cod" -> "fish", "Rarity" -> "unicorn")
    val hm2 = (new HashMap[String,String]) ++= arm2
    
    List(null, "cod", "sparrow", "Rarity").forall(i =>
      arm2.get(i) == hm2.get(i) &&
      arm2.getOrElse(i, "") == hm2.getOrElse(i, "") &&
      arm2(i) == hm2.get(i).getOrElse(if (i==null) "null" else i.toString) &&
      arm2.getOrNull(i) == hm2.get(i).orNull
    )
  }
}