@@ -707,16 +707,17 @@ macro testintersect(a, b, result)
707
707
a = esc (a)
708
708
b = esc (b)
709
709
result = esc (result)
710
- Base. remove_linenums! (quote
710
+ # use a manual macrocall expression since Test will examine this __source__ value
711
+ return quote
711
712
# test real intersect
712
- @test $ cmp (_type_intersect ($ a, $ b), $ result)
713
- @test $ cmp (_type_intersect ($ b, $ a), $ result)
713
+ $ ( Expr ( :macrocall , : var" @test" , __source__, :( $ cmp (_type_intersect ($ a, $ b), $ result))) )
714
+ $ ( Expr ( :macrocall , : var" @test" , __source__, :( $ cmp (_type_intersect ($ b, $ a), $ result))) )
714
715
# test simplified intersect
715
716
if ! ($ result === Union{})
716
- @test typeintersect ($ a, $ b) != Union{}
717
- @test typeintersect ($ b, $ a) != Union{}
717
+ $ ( Expr ( :macrocall , : var" @test" , __source__, :( typeintersect ($ a, $ b) != Union{})))
718
+ $ ( Expr ( :macrocall , : var" @test" , __source__, :( typeintersect ($ b, $ a) != Union{})))
718
719
end
719
- end )
720
+ end
720
721
end
721
722
722
723
abstract type IT4805_2{N, T} end
@@ -2267,31 +2268,46 @@ let S = Tuple{Integer, U} where {II<:Array, U<:Tuple{Vararg{II, 1}}}
2267
2268
@testintersect (S, Tuple{Int, U} where {N, U<: Tuple{Any,Any,Vararg{Any,N}} }, Union{})
2268
2269
end
2269
2270
2271
+ function equal_envs (env1, env2)
2272
+ length (env1) == length (env2) || return false
2273
+ for i = 1 : length (env1)
2274
+ a = env1[i]
2275
+ b = env2[i]
2276
+ if a isa TypeVar
2277
+ if ! (b isa TypeVar && a. name == b. name && a. lb == b. lb && a. ub == b. ub)
2278
+ return false
2279
+ end
2280
+ elseif ! (a == b)
2281
+ return false
2282
+ end
2283
+ end
2284
+ return true
2285
+ end
2286
+
2270
2287
# issue #43064
2271
2288
let
2272
- env_tuple (@nospecialize (x), @nospecialize (y)) = (intersection_env (x, y)[2 ]. .. ,)
2273
- all_var (x:: UnionAll ) = (x. var, all_var (x. body)... )
2274
- all_var (x:: DataType ) = ()
2289
+ env_tuple (@nospecialize (x), @nospecialize (y)) = intersection_env (x, y)[2 ]
2275
2290
TT0 = Tuple{Type{T},Union{Real,Missing,Nothing}} where {T}
2276
2291
TT1 = Union{Type{Int8},Type{Int16}}
2277
2292
@test env_tuple (Tuple{TT1,Missing}, TT0) ===
2278
2293
env_tuple (Tuple{TT1,Nothing}, TT0) ===
2279
- env_tuple (Tuple{TT1,Int}, TT0) === all_var (TT0)
2294
+ env_tuple (Tuple{TT1,Int}, TT0) ===
2295
+ Core. svec (TT0. var)
2280
2296
2281
2297
TT0 = Tuple{T1,T2,Union{Real,Missing,Nothing}} where {T1,T2}
2282
2298
TT1 = Tuple{T1,T2,Union{Real,Missing,Nothing}} where {T2,T1}
2283
2299
TT2 = Tuple{Union{Int,Int8},Union{Int,Int8},Int}
2284
2300
TT3 = Tuple{Int,Union{Int,Int8},Int}
2285
- @test env_tuple (TT2, TT0) === all_var (TT0 )
2286
- @test env_tuple (TT2, TT1) === all_var (TT1 )
2287
- @test env_tuple (TT3, TT0) === Base . setindex ( all_var (TT0), Int, 1 )
2288
- @test env_tuple (TT3, TT1) === Base . setindex ( all_var (TT1), Int, 2 )
2301
+ @test equal_envs ( env_tuple (TT2, TT0), Core . svec ( TypeVar ( :T1 , Union{Int, Int8}), TypeVar ( :T2 , Union{Int, Int8})) )
2302
+ @test equal_envs ( env_tuple (TT2, TT1), Core . svec ( TypeVar ( :T2 , Union{Int, Int8}), TypeVar ( :T1 , Union{Int, Int8})) )
2303
+ @test equal_envs ( env_tuple (TT3, TT0), Core . svec (Int, TypeVar ( :T2 , Union{ Int, Int8})) )
2304
+ @test equal_envs ( env_tuple (TT3, TT1), Core . svec ( TypeVar ( :T2 , Union{ Int, Int8}), Int) )
2289
2305
2290
2306
TT0 = Tuple{T1,T2,T1,Union{Real,Missing,Nothing}} where {T1,T2}
2291
2307
TT1 = Tuple{T1,T2,T1,Union{Real,Missing,Nothing}} where {T2,T1}
2292
2308
TT2 = Tuple{Int,Union{Int,Int8},Int,Int}
2293
- @test env_tuple (TT2, TT0) === Base . setindex ( all_var (TT0), Int, 1 )
2294
- @test env_tuple (TT2, TT1) === Base . setindex ( all_var (TT1), Int, 2 )
2309
+ @test equal_envs ( env_tuple (TT2, TT0), Core . svec (Int, TypeVar ( :T2 , Union{ Int, Int8})) )
2310
+ @test equal_envs ( env_tuple (TT2, TT1), Core . svec ( TypeVar ( :T2 , Union{ Int, Int8}), Int) )
2295
2311
end
2296
2312
2297
2313
# issue #46735
@@ -2686,3 +2702,17 @@ let S = Tuple{Val{<:T}, Union{Int,T}} where {T},
2686
2702
@testintersect (S, T, ! Union{})
2687
2703
@test ! Base. has_free_typevars (typeintersect (S, T))
2688
2704
end
2705
+
2706
+ # issue 55230
2707
+ let T1 = NTuple{12 , Union{Val{1 }, Val{2 }, Val{3 }, Val{4 }, Val{5 }, Val{6 }}}
2708
+ T2 = Tuple{<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any }
2709
+ @test T1 <: T2
2710
+ T2 = Tuple{<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Val }
2711
+ @test T1 <: T2
2712
+ T2 = Tuple{<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Real }
2713
+ @test ! (T1 <: T2 )
2714
+ T2 = Tuple{<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Union{Val,Real} }
2715
+ @test T1 <: T2
2716
+ T2 = Tuple{<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Any ,<: Union{String,Real} }
2717
+ @test ! (T1 <: T2 )
2718
+ end
0 commit comments