@@ -707,16 +707,17 @@ macro testintersect(a, b, result)
707707 a = esc (a)
708708 b = esc (b)
709709 result = esc (result)
710- Base. remove_linenums! (quote
710+ # use a manual macrocall expression since Test will examine this __source__ value
711+ return quote
711712 # 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))) )
714715 # test simplified intersect
715716 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{})))
718719 end
719- end )
720+ end
720721end
721722
722723abstract type IT4805_2{N, T} end
@@ -2267,31 +2268,46 @@ let S = Tuple{Integer, U} where {II<:Array, U<:Tuple{Vararg{II, 1}}}
22672268 @testintersect (S, Tuple{Int, U} where {N, U<: Tuple{Any,Any,Vararg{Any,N}} }, Union{})
22682269end
22692270
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+
22702287# issue #43064
22712288let
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 ]
22752290 TT0 = Tuple{Type{T},Union{Real,Missing,Nothing}} where {T}
22762291 TT1 = Union{Type{Int8},Type{Int16}}
22772292 @test env_tuple (Tuple{TT1,Missing}, TT0) ===
22782293 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)
22802296
22812297 TT0 = Tuple{T1,T2,Union{Real,Missing,Nothing}} where {T1,T2}
22822298 TT1 = Tuple{T1,T2,Union{Real,Missing,Nothing}} where {T2,T1}
22832299 TT2 = Tuple{Union{Int,Int8},Union{Int,Int8},Int}
22842300 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) )
22892305
22902306 TT0 = Tuple{T1,T2,T1,Union{Real,Missing,Nothing}} where {T1,T2}
22912307 TT1 = Tuple{T1,T2,T1,Union{Real,Missing,Nothing}} where {T2,T1}
22922308 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) )
22952311end
22962312
22972313# issue #46735
@@ -2686,3 +2702,17 @@ let S = Tuple{Val{<:T}, Union{Int,T}} where {T},
26862702 @testintersect (S, T, ! Union{})
26872703 @test ! Base. has_free_typevars (typeintersect (S, T))
26882704end
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