Skip to content

Commit

Permalink
Add large tuple tests
Browse files Browse the repository at this point in the history
  • Loading branch information
odersky committed Nov 26, 2023
1 parent b88d4c6 commit 73b2ead
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 0 deletions.
6 changes: 6 additions & 0 deletions tests/run/named-tuples-xxl.check
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(0,0,0,0,0,0,0,0,0,0,Bob,0,33,0,0,0,0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0,0,0,Bob,0,33,0,0,0,0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0,0,0,Bob,0,33,0,0,0,0,0,0,0,0,0,0,0)
Bob is younger than Bill
Bob is younger than Lucy
Bill is younger than Lucy
92 changes: 92 additions & 0 deletions tests/run/named-tuples-xxl.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import language.experimental.namedTuples
import NamedTuple.dropNames

type Person = (
x0: Int, x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int,
name: String, y1: Int, age: Int, y2: Int,
z0: Int, z1: Int, z2: Int, z3: Int, z4: Int, z5: Int, z6: Int, z7: Int, z8: Int, z9: Int)

val bob = (
x0 = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0, x9 = 0,
name = "Bob", y1 = 0, age = 33, y2 = 0,
z0 = 0, z1 = 0, z2 = 0, z3 = 0, z4 = 0, z5 = 0, z6 = 0, z7 = 0, z8 = 0, z9 = 0)

val person2: Person = bob


type AddressInfo = (city: String, zip: Int)
val addr = (city = "Lausanne", zip = 1003)

type CombinedInfo = Tuple.Concat[Person, AddressInfo]
val bobWithAddr = bob ++ addr
val _: CombinedInfo = bobWithAddr
val _: CombinedInfo = bob ++ addr

@main def Test =
assert(bob.name == "Bob")
assert(bob.age == 33)
bob match
case p @ (name = "Bob", age = a) => // !!! spurious unreachable case warning
val x = p
println(x)
assert(p.age == 33)
assert(a == 33)
case _ =>
assert(false)
bob match
case p @ (name = "Peter", age = _) => assert(false)
case p @ (name = "Bob", age = 0) => assert(false)
case _ =>
bob match
case b @ (x0 = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0, x9 = 0,
name = "Bob", y1 = 0, age = 33, y2 = 0,
z0 = 0, z1 = 0, z2 = 0, z3 = 0, z4 = 0, z5 = 0, z6 = 0, z7 = 0, z8 = 0, z9 = 0)
=> // !!! spurious unreachable case warning
println(bob)
println(b)
case _ => assert(false)

val x = bob.age
assert(x == 33)

val y: (
Int, Int, Int, Int, Int, Int, Int, Int, Int, Int,
String, Int, Int, Int,
Int, Int, Int, Int, Int, Int, Int, Int, Int, Int)
= bob.dropNames

def ageOf(person: Person) = person.age

assert(ageOf(bob) == 33)

val persons = List(
bob,
(x0 = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0, x9 = 0,
name = "Bill", y1 = 0, age = 40, y2 = 0,
z0 = 0, z1 = 0, z2 = 0, z3 = 0, z4 = 0, z5 = 0, z6 = 0, z7 = 0, z8 = 0, z9 = 0),
(x0 = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0, x9 = 0,
name = "Lucy", y1 = 0, age = 45, y2 = 0,
z0 = 0, z1 = 0, z2 = 0, z3 = 0, z4 = 0, z5 = 0, z6 = 0, z7 = 0, z8 = 0, z9 = 0),
)
for
p <- persons
q <- persons
if p.age < q.age
do
println(s"${p.name} is younger than ${q.name}")

val name1 = bob(10).value
val age1 = bob(12).value

val minors = persons.filter:
case (age = a) => a < 18
case _ => false

assert(minors.isEmpty)

bob match
case bob1 @ (age = 33, name = "Bob") =>
val x: Person = bob1 // bob1 still has type Person with the unswapped elements
case _ => assert(false)


0 comments on commit 73b2ead

Please sign in to comment.