Skip to content

Commit 06db14f

Browse files
committed
New tests are added (multidimensional arrays, array builder, wrapper, arrayOps)
1 parent 712dbe6 commit 06db14f

9 files changed

+180
-0
lines changed

test/dotc/tests.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ class tests extends CompilerTest {
113113
@Test def pos_vc_array_object = compileFile(runDir, "valueclasses-array-object", args = "-Ycheck:all" :: Nil)
114114
@Test def pos_vc_array_newarray = compileFile(runDir, "valueclasses-array-newarray", args = "-Ycheck:all" :: Nil)
115115
@Test def pos_vc_underlying_null = compileFile(runDir, "valueclasses-underlying-null", args = "-Ycheck:all" :: Nil)
116+
@Test def pos_vc_array_creation = compileFile(runDir, "valueclasses-array-creation", args = "-Ycheck:all" :: Nil)
117+
@Test def pos_vc_array_caseclasses = compileFile(runDir, "valueclasses-array-caseclasses", args = "-Ycheck:all" :: Nil)
118+
@Test def pos_vc_array_arrayops = compileFile(runDir, "valueclasses-array-arrayops", args = "-Ycheck:all" :: Nil)
119+
@Test def pos_vc_array_array = compileFile(runDir, "valueclasses-array-array", args = "-Ycheck:all" :: Nil)
116120

117121
@Test def pos_all = compileFiles(posDir) // twice omitted to make tests run faster
118122

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
List(X@0, X@0, X@0, X@0)
2+
List([X, [X, [X, [X)
3+
List(X@1, X@2, X@3, X@4)
4+
List(X@1, X@1, X@1, X@1, X@1)
5+
List([X, [X, [X, [X, [X)
6+
List(X@0, X@1, X@2, X@3, X@4)
7+
List([X, [X, [X, [X)
8+
List(X@5, X@a, X@14)
9+
Some(Vector(X@1, X@2, X@3))
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class X[T](val x: T) extends AnyVal
2+
object Test {
3+
def main(args: Array[String]) = {
4+
def pl(xs: Array[_]) = println(xs.toList)
5+
pl(Array.ofDim[X](4))
6+
pl(Array.ofDim[X](4,3))
7+
Array.ofDim[X](4,3,2)
8+
Array.ofDim[X](4,3,2,5)
9+
Array.ofDim[X](4,3,2,5,6)
10+
pl(Array.concat(Array[X](new X(1), new X(2)), Array[X](new X(3), new X(4))))
11+
import scala.collection.mutable.{ WrappedArray, ArrayBuilder }
12+
val ar: WrappedArray[X] = Array[X](new X(1), new X(2))
13+
ar.toArray
14+
val ar0: WrappedArray[X] = Array[X](new X(1), new X(2))
15+
val ar1: ArrayBuilder[X] = ArrayBuilder.make[X]()
16+
val ar2 = ar1.++=(ar0)
17+
pl(Array.fill(5)(new X(1)))
18+
pl(Array.fill(5,6)(new X(1)))
19+
Array.fill(5,6,7)(new X(1))
20+
Array.fill(5,6,7,8)(new X(1))
21+
Array.fill(5,6,7,8,9)(new X(1))
22+
23+
pl(Array.tabulate(5)(x => new X(x)))
24+
pl(Array.tabulate(4,5)((x,y) => new X(x + y)))
25+
Array.tabulate(4,5,6)((x,y,z) => new X(x + y + z))
26+
Array.tabulate(4,5,6,7)((x,y,z,q) => new X(x + y + z + q))
27+
Array.tabulate(4,5,6,7,8)((x,y,z,q,w) => new X(x + y + z + q + w))
28+
29+
pl(Array.iterate(new X(5), 3)(xx => new X(2*xx.x)))
30+
println(Array.unapplySeq(Array[X](new X(1), new X(2), new X(3))))
31+
}
32+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Array(X@1, X@2)
2+
SeqView(...)
3+
SeqViewS(...)
4+
List(X@1, X@2)
5+
List()
6+
non-empty iterator
7+
ArrayBuffer(X@1, X@2)
8+
X@1
9+
WrappedArray(X@1, X@2)
10+
List(X@1, X@2)
11+
Set(X@1, X@2)
12+
Set(ArrayBuffer(X@1, X@4), ArrayBuffer(X@2, X@5), ArrayBuffer(X@3, X@6))
13+
t4.transpose: List([X, [X, [X)
14+
t21.transpose: List()
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import scala.collection.mutable._
2+
class X(val x: Int) extends AnyVal
3+
object Test {
4+
def main(args: Array[String]) = {
5+
val ar3 = Array(Array(new X(1)), Array(new X(2)))
6+
val ar = Array(new X(1), new X(2))
7+
println(ar.deep) //ArrayLike
8+
println(ar.view) //IndexedSeqLike
9+
println(ar.view(0,1))
10+
println(ar.drop(0).toList)
11+
println(ar.take(0).toList)
12+
println(ar.iterator)
13+
println(ar.toBuffer)
14+
println(ar.head)
15+
println(ar.seq)
16+
println(ar3.flatten.toList)
17+
18+
val ar2: WrappedArray[X] = ar
19+
println(ar2.toArray.toSet)
20+
ar2.companion
21+
22+
val t = Array((1, new X(3)), (2, new X(4)))
23+
t.unzip
24+
25+
val t2: Array[Array[X]] = Array(Array(new X(1), new X(2), new X(3)), Array(new X(4), new X(5), new X(6)))
26+
val t3: WrappedArray[Array[X]] = t2
27+
println(t3.transpose.toSet)
28+
val t4: ArrayOps[Array[X]] = t2
29+
println(s"t4.transpose: ${t4.transpose.toList}")
30+
val t21: Array[Array[X]] = Array(Array[X](), Array[X]())
31+
println(s"t21.transpose: ${t21.transpose.toList}")
32+
}
33+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
List([Y)
2+
List(Y(null), Y(null))
3+
List(Y(null), Y(null), Y(null), Y(null), Y(null))
4+
List(Y(Z()), Y(Z()), Y(Z()))
5+
List(Y(Z()), Y(Z()), Y(Z()))
6+
List(Y(Z()), Y(Z()), Y(Z()))
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
case class Y[T](val y: T) extends AnyVal
2+
case class Z()
3+
4+
object Test {
5+
def main(args: Array[String]) = {
6+
val a1 = Array(Array[Y[Z]]())
7+
val a2 = Array.ofDim[Y[Z]](2)
8+
val a3 = new Array[Y[Z]](5)
9+
val a4: Array[Y[Z]] = Array(Y[Z](Z()), Y[Z](Z()), Y[Z](Z()))
10+
11+
println(a1.toList)
12+
println(a2.toList)
13+
println(a3.toList)
14+
println(a4.toArray.toList)
15+
println(a4.par.toList)
16+
println(a4.map(x => a4(0)).toList)
17+
}
18+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
List(X@b, X@16)
2+
List([X, [X)
3+
List(X@7, X@2)
4+
X@1
5+
X@1
6+
List([X, [X)
7+
List(X@7, X@2)
8+
List(X@0, X@0, X@0)
9+
List(null, null, null)
10+
List(null, null, null)
11+
List(X@6, X@6)
12+
List(X@e)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class X(val x: Int) extends AnyVal
2+
object Test {
3+
def main(args: Array[String]) = {
4+
val simple = Array(new X(11), new X(22))
5+
val a = Array(Array(new X(1), new X(2)), Array(new X(3)))
6+
val b = a(0)
7+
val c = b(0)
8+
val d = a(0)(0)
9+
a(0)(0) = new X(7)
10+
def test(x: Array[Array[X]]) = {
11+
x(0) = Array(new X(5));
12+
x
13+
}
14+
def test2(x: Array[X]) = x
15+
def test3[T](y: Array[T]) = {
16+
val a = y(0);
17+
y(0) = y(1);
18+
y(1) = a;
19+
y match {
20+
case ar@Array(el1: X, el2: X) => (ar.asInstanceOf[Array[X]]) filter (_.x > 1) map { t => new X(el2.x * 2) }
21+
case _ => y
22+
}
23+
}
24+
def test4(y: Array[X]) = {
25+
y match {
26+
case ar@Array(el1, el2) => ar filter (_.x > 1) map { t => new X(el2.x * 2) }
27+
case _ => y
28+
}
29+
}
30+
31+
32+
val x = new Array[X](3)
33+
val y = new Array[Array[X]](3)
34+
val z = new Array[Array[Array[X]]](3)
35+
36+
println(simple.toList)
37+
38+
println(a.toList)
39+
println(b.toList)
40+
println(c)
41+
println(d)
42+
println(test(a).toList)
43+
println(test2(b).toList)
44+
45+
println(x.toList)
46+
println(y.toList)
47+
println(z.toList)
48+
49+
println(test3(Array(new X(3), new X(5))).toList)
50+
println(test4(Array(new X(0), new X(7))).toList)
51+
}
52+
}

0 commit comments

Comments
 (0)