@@ -127,6 +127,31 @@ object ReusabilityTest extends TestSuite {
127127 assertEq(a ~=~ b, false )
128128 }
129129
130+ // Utest's Scala 3 macros don't handle inner macros well and will cause crash
131+
132+ private object derive {
133+ def CC0 = Reusability .derive[CC0 ]
134+ def CC1 = Reusability .derive[CC1 ]
135+ def CC2 = Reusability .derive[CC2 ]
136+ def CCT0_Int = Reusability .derive[CCT0 [Int ]]
137+ def CCT1_Int = Reusability .derive[CCT1 [Int ]]
138+ def CCT2_String = Reusability .derive[CCT2 [String ]]
139+ def CC1_i = Reusability .caseClassExcept[CC1 ](" i" )
140+ def CC2_i = Reusability .caseClassExcept[CC2 ](" i" )
141+ def CC2_n = Reusability .caseClassExcept[CC2 ](" n" )
142+ def CC4_a_c = Reusability .caseClassExcept[CC4 ](" a" , " c" )
143+ }
144+
145+ private class DerivesByRef {
146+ class X
147+ implicit val x : Reusability [X ] = Reusability .never
148+ val _ = x
149+ case class Y (x : X )
150+ implicit val y : Reusability [Y ] = Reusability .derive[Y ]
151+ val y1 = Y (new X )
152+ val y2 = Y (new X )
153+ }
154+
130155 override def tests = Tests {
131156
132157 " macros" - {
@@ -135,32 +160,32 @@ object ReusabilityTest extends TestSuite {
135160
136161 " caseClass" - {
137162 " cc0" - {
138- implicit val r : Reusability [CC0 ] = Reusability . derive[ CC0 ]
163+ implicit val r : Reusability [CC0 ] = derive. CC0
139164 test(CC0 (), CC0 (), true )
140165 }
141166 " cc1" - {
142- implicit val r : Reusability [CC1 ] = Reusability . derive[ CC1 ]
167+ implicit val r : Reusability [CC1 ] = derive. CC1
143168 test(CC1 (2 ), CC1 (2 ), true )
144169 test(CC1 (2 ), CC1 (3 ), false )
145170 }
146171 " cc2" - {
147- implicit val r : Reusability [CC2 ] = Reusability . derive[ CC2 ]
172+ implicit val r : Reusability [CC2 ] = derive. CC2
148173 test(CC2 (3 ," a" ), CC2 (3 ," a" ), true )
149174 test(CC2 (3 ," a" ), CC2 (3 ," b" ), false )
150175 test(CC2 (3 ," a" ), CC2 (4 ," a" ), false )
151176 }
152177
153178 " cct0" - {
154- implicit val r : Reusability [CCT0 [Int ]] = Reusability . derive[ CCT0 [ Int ]]
179+ implicit val r : Reusability [CCT0 [Int ]] = derive. CCT0_Int
155180 test(CCT0 [Int ](), CCT0 [Int ](), true )
156181 }
157182 " cct1" - {
158- implicit val r : Reusability [CCT1 [Int ]] = Reusability . derive[ CCT1 [ Int ]]
183+ implicit val r : Reusability [CCT1 [Int ]] = derive. CCT1_Int
159184 test(CCT1 (2 ), CCT1 (2 ), true )
160185 test(CCT1 (2 ), CCT1 (3 ), false )
161186 }
162187 " cct2" - {
163- implicit val r : Reusability [CCT2 [String ]] = Reusability . derive[ CCT2 [ String ]]
188+ implicit val r : Reusability [CCT2 [String ]] = derive. CCT2_String
164189 test(CCT2 (3 ," a" ), CCT2 (3 ," a" ), true )
165190 test(CCT2 (3 ," a" ), CCT2 (3 ," b" ), false )
166191 test(CCT2 (3 ," a" ), CCT2 (4 ," a" ), false )
@@ -170,41 +195,36 @@ object ReusabilityTest extends TestSuite {
170195 ()
171196 }
172197 " derivesByRef" - {
173- class X
174- implicit val x : Reusability [X ] = Reusability .never
175- val _ = x
176- case class Y (x : X )
177- implicit val y : Reusability [Y ] = Reusability .derive[Y ]
178- val y1 = Y (new X )
179- val y2 = Y (new X )
198+ val d = new DerivesByRef
199+ import d ._
180200 test(y1, y2, false )
181201 test(y1, y1, true )
182202 }
183203 }
184204
185205 " caseClassExcept" - {
186206 " 1/1" - {
187- implicit val r : Reusability [CC1 ] = Reusability .caseClassExcept[ CC1 ]( " i " )
207+ implicit val r : Reusability [CC1 ] = derive. CC1_i
188208 test(CC1 (2 ), CC1 (2 ), true )
189209 test(CC1 (2 ), CC1 (3 ), true )
190210 }
191211
192212 " 1st of 2" - {
193- implicit val r : Reusability [CC2 ] = Reusability .caseClassExcept[ CC2 ]( " i " )
213+ implicit val r : Reusability [CC2 ] = derive. CC2_i
194214 test(CC2 (3 ," a" ), CC2 (3 ," a" ), true )
195215 test(CC2 (3 ," a" ), CC2 (3 ," b" ), false )
196216 test(CC2 (3 ," a" ), CC2 (4 ," a" ), true )
197217 }
198218
199219 " 2nd of 2" - {
200- implicit val r : Reusability [CC2 ] = Reusability .caseClassExcept[ CC2 ]( " n " )
220+ implicit val r : Reusability [CC2 ] = derive. CC2_n
201221 test(CC2 (3 ," a" ), CC2 (3 ," a" ), true )
202222 test(CC2 (3 ," a" ), CC2 (3 ," b" ), true )
203223 test(CC2 (3 ," a" ), CC2 (4 ," a" ), false )
204224 }
205225
206226 " 2/4" - {
207- implicit val r : Reusability [CC4 ] = Reusability .caseClassExcept[ CC4 ]( " a " , " c " )
227+ implicit val r : Reusability [CC4 ] = derive. CC4_a_c
208228 test(CC4 (1 , 2 , 3 , 4 ), CC4 (1 , 2 , 3 , 4 ), true )
209229 test(CC4 (1 , 2 , 3 , 4 ), CC4 (0 , 2 , 3 , 4 ), true )
210230 test(CC4 (1 , 2 , 3 , 4 ), CC4 (1 , 0 , 3 , 4 ), false )
0 commit comments