Skip to content

Commit e588c5a

Browse files
committed
Add large tuple tests
1 parent b88d4c6 commit e588c5a

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

tests/run/named-tuples-xxl.check

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
(0,0,0,0,0,0,0,0,0,0,Bob,0,33,0,0,0,0,0,0,0,0,0,0,0)
2+
(0,0,0,0,0,0,0,0,0,0,Bob,0,33,0,0,0,0,0,0,0,0,0,0,0)
3+
(0,0,0,0,0,0,0,0,0,0,Bob,0,33,0,0,0,0,0,0,0,0,0,0,0)
4+
Bob is younger than Bill
5+
Bob is younger than Lucy
6+
Bill is younger than Lucy

tests/run/named-tuples-xxl.scala

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import language.experimental.namedTuples
2+
import NamedTuple.dropNames
3+
4+
type Person = (
5+
x0: Int, x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int,
6+
name: String, y1: Int, age: Int, y2: Int,
7+
z0: Int, z1: Int, z2: Int, z3: Int, z4: Int, z5: Int, z6: Int, z7: Int, z8: Int, z9: Int)
8+
9+
val bob = (
10+
x0 = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0, x9 = 0,
11+
name = "Bob", y1 = 0, age = 33, y2 = 0,
12+
z0 = 0, z1 = 0, z2 = 0, z3 = 0, z4 = 0, z5 = 0, z6 = 0, z7 = 0, z8 = 0, z9 = 0)
13+
14+
val person2: Person = bob
15+
16+
17+
type AddressInfo = (city: String, zip: Int)
18+
val addr = (city = "Lausanne", zip = 1003)
19+
20+
type CombinedInfo = Tuple.Concat[Person, AddressInfo]
21+
val bobWithAddr = bob ++ addr
22+
val _: CombinedInfo = bobWithAddr
23+
val _: CombinedInfo = bob ++ addr
24+
25+
@main def Test =
26+
assert(bob.name == "Bob")
27+
assert(bob.age == 33)
28+
bob match
29+
case p @ (name = "Bob", age = a) => // !!! spurious unreachable case warning
30+
val x = p
31+
println(x)
32+
assert(p.age == 33)
33+
assert(a == 33)
34+
case _ =>
35+
assert(false)
36+
bob match
37+
case p @ (name = "Peter", age = _) => assert(false)
38+
case p @ (name = "Bob", age = 0) => assert(false)
39+
case _ =>
40+
bob match
41+
case b @ (x0 = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0, x9 = 0,
42+
name = "Bob", y1 = 0, age = 33, y2 = 0,
43+
z0 = 0, z1 = 0, z2 = 0, z3 = 0, z4 = 0, z5 = 0, z6 = 0, z7 = 0, z8 = 0, z9 = 0)
44+
=> // !!! spurious unreachable case warning
45+
println(bob)
46+
println(b)
47+
case _ => assert(false)
48+
49+
val x = bob.age
50+
assert(x == 33)
51+
52+
val y: (
53+
Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
54+
String, Int, Int, Int,
55+
Int, Int, Int, Int, Int, Int, Int, Int, Int, Int)
56+
= bob.dropNames
57+
58+
def ageOf(person: Person) = person.age
59+
60+
assert(ageOf(bob) == 33)
61+
62+
val persons = List(
63+
bob,
64+
(x0 = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0, x9 = 0,
65+
name = "Bill", y1 = 0, age = 40, y2 = 0,
66+
z0 = 0, z1 = 0, z2 = 0, z3 = 0, z4 = 0, z5 = 0, z6 = 0, z7 = 0, z8 = 0, z9 = 0),
67+
(x0 = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0, x9 = 0,
68+
name = "Lucy", y1 = 0, age = 45, y2 = 0,
69+
z0 = 0, z1 = 0, z2 = 0, z3 = 0, z4 = 0, z5 = 0, z6 = 0, z7 = 0, z8 = 0, z9 = 0),
70+
)
71+
for
72+
p <- persons
73+
q <- persons
74+
if p.age < q.age
75+
do
76+
println(s"${p.name} is younger than ${q.name}")
77+
78+
val name1 = bob(10).value
79+
val age1 = bob(12).value
80+
81+
val minors = persons.filter:
82+
case (age = a) => a < 18
83+
case _ => false
84+
85+
assert(minors.isEmpty)
86+
87+
bob match
88+
case bob1 @ (age = 33, name = "Bob") =>
89+
val x: Person = bob1 // bob1 still has type Person with the unswapped elements
90+
case _ => assert(false)
91+
92+

tests/run/named-tuples.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ val _: CombinedInfo = bob ++ addr
2525
println(bobWithAddr)
2626
bob match
2727
case p @ (name = "Bob", age = _) => println(p.age)
28+
bob match
29+
case p @ (name = "Bob", age = age) => assert(age == 33)
2830
bob match
2931
case p @ (name = "Peter", age = _) => println(p.age)
3032
case p @ (name = "Bob", age = 0) => println(p.age)

0 commit comments

Comments
 (0)