Skip to content

Commit 1892d65

Browse files
committed
More tests, particular compared to given
1 parent 650f854 commit 1892d65

File tree

3 files changed

+252
-10
lines changed

3 files changed

+252
-10
lines changed

tests/run/i18183.given.scala

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
case class Foo(n: Int)
2+
3+
class Bar(n: Int):
4+
given foo: Foo = new Foo(n)
5+
6+
class InMethod:
7+
def wild(bar: Bar): Unit =
8+
import bar.*
9+
given foo: Foo = new Foo(2)
10+
assert(foo eq summon[Foo])
11+
12+
def givenWild(bar: Bar): Unit =
13+
import bar.{ given, * }
14+
given foo: Foo = new Foo(2)
15+
assert(foo eq summon[Foo])
16+
17+
def givn(bar: Bar): Unit =
18+
import bar.given
19+
given foo: Foo = new Foo(2)
20+
assert(foo eq summon[Foo])
21+
22+
def givenFoo(bar: Bar): Unit =
23+
import bar.given Foo
24+
given foo: Foo = new Foo(2)
25+
assert(foo eq summon[Foo])
26+
27+
def named(bar: Bar): Unit =
28+
import bar.foo
29+
given foo: Foo = new Foo(2)
30+
assert(foo eq summon[Foo])
31+
32+
def namedGivenWild(bar: Bar, bar2: Bar): Unit =
33+
import bar.foo, bar2.{ given, * }
34+
assert(bar.foo eq summon[Foo])
35+
36+
def givenWildNamed(bar: Bar, bar2: Bar): Unit =
37+
import bar2.{ given, * }, bar.foo
38+
assert(bar.foo eq summon[Foo])
39+
40+
def namedWild(bar: Bar, bar2: Bar): Unit =
41+
import bar.foo, bar2.*
42+
assert(bar.foo eq summon[Foo])
43+
44+
def wildNamed(bar: Bar, bar2: Bar): Unit =
45+
import bar2.*, bar.foo
46+
assert(bar.foo eq summon[Foo])
47+
48+
class InClassWild(bar: Bar):
49+
import bar.*
50+
given foo: Foo = new Foo(2)
51+
assert(foo eq summon[Foo])
52+
53+
class InClassGivenWild(bar: Bar):
54+
import bar.{ given, * }
55+
given foo: Foo = new Foo(2)
56+
assert(foo eq summon[Foo])
57+
58+
class InClassGiven(bar: Bar):
59+
import bar.given
60+
given foo: Foo = new Foo(2)
61+
assert(foo eq summon[Foo])
62+
63+
class InClassGivenFoo(bar: Bar):
64+
import bar.given Foo
65+
given foo: Foo = new Foo(2)
66+
assert(foo eq summon[Foo])
67+
68+
class InClassNamed(bar: Bar):
69+
import bar.foo
70+
given foo: Foo = new Foo(2)
71+
assert(foo eq summon[Foo])
72+
73+
object Test:
74+
def main(args: Array[String]): Unit =
75+
val bar = new Bar(1)
76+
val bar2 = new Bar(2)
77+
78+
new InMethod().wild(bar)
79+
new InMethod().givenWild(bar) // was: error
80+
new InMethod().givn(bar) // was: error
81+
new InMethod().givenFoo(bar) // was: error
82+
new InMethod().named(bar) // was: error
83+
84+
new InMethod().namedWild(bar, bar2)
85+
new InMethod().wildNamed(bar, bar2)
86+
new InMethod().namedGivenWild(bar, bar2) // was: error
87+
new InMethod().givenWildNamed(bar, bar2)
88+
89+
new InClassWild(bar)
90+
new InClassGivenWild(bar) // was: error
91+
new InClassGiven(bar) // was: error
92+
new InClassGivenFoo(bar) // was: error
93+
new InClassNamed(bar) // was: error

tests/run/i18183.mixed.scala

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
case class Foo(n: Int)
2+
3+
class OldBar(n: Int):
4+
implicit val foo: Foo = new Foo(n)
5+
6+
class NewBar(n: Int):
7+
given foo: Foo = new Foo(n)
8+
9+
class OldInMethod:
10+
def wild(bar: OldBar): Unit =
11+
import bar.*
12+
given foo: Foo = new Foo(2)
13+
assert(foo eq summon[Foo])
14+
15+
def named(bar: OldBar): Unit =
16+
import bar.foo
17+
given foo: Foo = new Foo(2)
18+
assert(foo eq summon[Foo])
19+
20+
def namedWild(bar: OldBar, bar2: NewBar): Unit =
21+
import bar.foo, bar2.*
22+
assert(bar.foo eq summon[Foo])
23+
24+
def wildNamed(bar: OldBar, bar2: NewBar): Unit =
25+
import bar2.*, bar.foo
26+
assert(bar.foo eq summon[Foo])
27+
28+
def namedGivenWild(bar: OldBar, bar2: NewBar): Unit =
29+
import bar.foo
30+
import bar2.{ given, * }
31+
assert(bar.foo eq summon[Foo])
32+
33+
def givenWildNamed(bar: OldBar, bar2: NewBar): Unit =
34+
import bar2.{ given, * }, bar.foo
35+
assert(bar.foo eq summon[Foo])
36+
37+
class OldInClassWild(bar: OldBar):
38+
import bar.*
39+
given foo: Foo = new Foo(2)
40+
assert(foo eq summon[Foo])
41+
42+
class OldInClassNamed(bar: OldBar):
43+
import bar.foo
44+
given foo: Foo = new Foo(2)
45+
assert(foo eq summon[Foo])
46+
47+
48+
class NewInMethod:
49+
def givenWild(bar: NewBar): Unit =
50+
import bar.{ given, * }
51+
implicit val foo: Foo = new Foo(2)
52+
assert(foo eq summon[Foo])
53+
54+
def wild(bar: NewBar): Unit =
55+
import bar.*
56+
implicit val foo: Foo = new Foo(2)
57+
assert(foo eq summon[Foo])
58+
59+
def givn(bar: NewBar): Unit =
60+
import bar.given
61+
implicit val foo: Foo = new Foo(2)
62+
assert(foo eq summon[Foo])
63+
64+
def givenFoo(bar: NewBar): Unit =
65+
import bar.given Foo
66+
implicit val foo: Foo = new Foo(2)
67+
assert(foo eq summon[Foo])
68+
69+
def named(bar: NewBar): Unit =
70+
import bar.foo
71+
implicit val foo: Foo = new Foo(2)
72+
assert(foo eq summon[Foo])
73+
74+
def namedWild(bar: NewBar, bar2: OldBar): Unit =
75+
import bar.foo, bar2.*
76+
assert(bar.foo eq summon[Foo])
77+
78+
def wildNamed(bar: NewBar, bar2: OldBar): Unit =
79+
import bar2.*, bar.foo
80+
assert(bar.foo eq summon[Foo])
81+
82+
class NewInClassGivenWild(bar: NewBar):
83+
import bar.{ given, * }
84+
implicit val foo: Foo = new Foo(2)
85+
assert(foo eq summon[Foo])
86+
87+
class NewInClassWild(bar: NewBar):
88+
import bar.*
89+
implicit val foo: Foo = new Foo(2)
90+
assert(foo eq summon[Foo])
91+
92+
class NewInClassGiven(bar: NewBar):
93+
import bar.given
94+
implicit val foo: Foo = new Foo(2)
95+
assert(foo eq summon[Foo])
96+
97+
class NewInClassGivenFoo(bar: NewBar):
98+
import bar.given Foo
99+
implicit val foo: Foo = new Foo(2)
100+
assert(foo eq summon[Foo])
101+
102+
class NewInClassNamed(bar: NewBar):
103+
import bar.foo
104+
implicit val foo: Foo = new Foo(2)
105+
assert(foo eq summon[Foo])
106+
107+
108+
object Test:
109+
def main(args: Array[String]): Unit =
110+
val oldBar = new OldBar(1)
111+
val newBar = new NewBar(1)
112+
val oldBar2 = new OldBar(2)
113+
val newBar2 = new NewBar(2)
114+
115+
116+
new OldInMethod().wild(oldBar) // was: error
117+
new OldInMethod().named(oldBar) // was: error
118+
119+
new OldInMethod().namedWild(oldBar, newBar2)
120+
new OldInMethod().wildNamed(oldBar, newBar2)
121+
new OldInMethod().namedGivenWild(oldBar, newBar2) // was: error
122+
new OldInMethod().givenWildNamed(oldBar, newBar2)
123+
124+
new OldInClassWild(oldBar) // was: error
125+
new OldInClassNamed(oldBar) // was: error
126+
127+
128+
new NewInMethod().wild(newBar)
129+
new NewInMethod().givenWild(newBar) // was: error
130+
new NewInMethod().givn(newBar) // was: error
131+
new NewInMethod().givenFoo(newBar) // was: error
132+
new NewInMethod().named(newBar) // was: error
133+
134+
new NewInMethod().namedWild(newBar, oldBar2) // was: error
135+
new NewInMethod().wildNamed(newBar, oldBar2)
136+
137+
new NewInClassWild(newBar)
138+
new NewInClassGivenWild(newBar) // was: error
139+
new NewInClassGiven(newBar) // was: error
140+
new NewInClassGivenFoo(newBar) // was: error
141+
new NewInClassNamed(newBar) // was: error

tests/run/i18183.scala

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,36 @@ class InMethod:
1414
implicit val foo: Foo = new Foo(2)
1515
assert(foo eq implicitly[Foo])
1616

17-
def namedWild(bar: Bar): Unit =
18-
val bar2 = new Bar(2)
17+
def namedWild(bar: Bar, bar2: Bar): Unit =
1918
import bar.foo
2019
import bar2._
2120
assert(bar.foo eq implicitly[Foo])
2221

23-
def wildNamed(bar: Bar): Unit =
24-
val bar2 = new Bar(2)
22+
def wildNamed(bar: Bar, bar2: Bar): Unit =
2523
import bar2._
2624
import bar.foo
2725
assert(bar.foo eq implicitly[Foo])
2826

29-
class InClass(bar: Bar):
27+
class InClassWild(bar: Bar):
3028
import bar._
3129
implicit val foo: Foo = new Foo(2)
3230
assert(foo eq implicitly[Foo])
3331

32+
class InClassNamed(bar: Bar):
33+
import bar.foo
34+
implicit val foo: Foo = new Foo(2)
35+
assert(foo eq implicitly[Foo])
36+
3437
object Test:
3538
def main(args: Array[String]): Unit =
3639
val bar = new Bar(1)
37-
new InMethod().wild(bar)
38-
new InMethod().named(bar)
39-
new InMethod().namedWild(bar)
40-
new InMethod().wildNamed(bar)
41-
new InClass(bar)
40+
val bar2 = new Bar(2)
41+
42+
new InMethod().wild(bar) // was: error
43+
new InMethod().named(bar) // was: error
44+
45+
new InMethod().namedWild(bar, bar2) // was: error
46+
new InMethod().wildNamed(bar, bar2)
47+
48+
new InClassWild(bar) // was: error
49+
new InClassNamed(bar) // was: error

0 commit comments

Comments
 (0)