1- using Test: @test_throws , @testset
1+ using JLArrays: JLArray
2+ using Test: @test , @test_throws , @testset
3+ using TestExtras: @constinferred
24using TypeParameterAccessors:
35 TypeParameterAccessors,
46 Position,
57 default_type_parameters,
68 set_default_type_parameters,
79 specify_default_type_parameters
8- using TestExtras: @constinferred
9- @testset " TypeParameterAccessors defaults" begin
10- @testset " Erroneously requires wrapping to infer" begin end
10+
11+ const arrayts = (Array, JLArray)
12+ @testset " TypeParameterAccessors defaults $arrayt " for arrayt in arrayts
13+ vectort = arrayt{<: Any ,1 }
1114 @testset " Get defaults" begin
12- @test @constinferred (default_type_parameters ($ Array , 1 )) == Float64
13- @test @constinferred (default_type_parameters ($ Array , 2 )) == 1
14- @test @constinferred (default_type_parameters ($ Array )) == (Float64, 1 )
15- @test @constinferred (default_type_parameters ($ Array , $ ((2 , 1 )))) == (1 , Float64)
16- @test @constinferred (broadcast ($ default_type_parameters, $ Array , (ndims, eltype))) ==
15+ @test @constinferred (default_type_parameters ($ arrayt , 1 )) == Float64
16+ @test @constinferred (default_type_parameters ($ arrayt , 2 )) == 1
17+ @test @constinferred (default_type_parameters ($ arrayt )) == (Float64, 1 )
18+ @test @constinferred (default_type_parameters ($ arrayt , $ ((2 , 1 )))) == (1 , Float64)
19+ @test @constinferred (broadcast ($ default_type_parameters, $ arrayt , (ndims, eltype))) ==
1720 (1 , Float64)
18- @test @constinferred (broadcast ($ default_type_parameters, $ Array , $ ((2 , 1 )))) ==
21+ @test @constinferred (broadcast ($ default_type_parameters, $ arrayt , $ ((2 , 1 )))) ==
1922 (1 , Float64)
20- @test @constinferred (broadcast ($ default_type_parameters, $ Array , (ndims, eltype))) ==
23+ @test @constinferred (broadcast ($ default_type_parameters, $ arrayt , (ndims, eltype))) ==
2124 (1 , Float64)
2225 end
2326
2427 @testset " Set defaults" begin
25- @test @constinferred (set_default_type_parameters ($ (Array{Float32}), 1 )) ==
26- Array{Float64}
27- @test @constinferred (set_default_type_parameters ($ (Array{Float32}), eltype)) ==
28- Array{Float64}
29- @test @constinferred (set_default_type_parameters ($ (Array{Float32}))) == Vector{Float64}
30- @test @constinferred (set_default_type_parameters ($ (Array{Float32}), $ ((1 , 2 )))) ==
31- Vector{Float64}
32- @test @constinferred (set_default_type_parameters ($ (Array{Float32}), (eltype, ndims))) ==
33- Vector{Float64}
34- @test @constinferred (set_default_type_parameters ($ Array)) == Vector{Float64}
35- @test @constinferred (set_default_type_parameters ($ Array, 1 )) == Array{Float64}
36- @test @constinferred (set_default_type_parameters ($ Array, $ ((1 , 2 )))) == Vector{Float64}
28+ @test @constinferred (set_default_type_parameters ($ (arrayt{Float32}), 1 )) ==
29+ arrayt{Float64}
30+ @test @constinferred (set_default_type_parameters ($ (arrayt{Float32}), eltype)) ==
31+ arrayt{Float64}
32+ @test @constinferred (set_default_type_parameters ($ (arrayt{Float32}))) ==
33+ vectort{Float64}
34+ @test @constinferred (set_default_type_parameters ($ (arrayt{Float32}), $ ((1 , 2 )))) ==
35+ vectort{Float64}
36+ @test @constinferred (
37+ set_default_type_parameters ($ (arrayt{Float32}), (eltype, ndims))
38+ ) == vectort{Float64}
39+ @test @constinferred (set_default_type_parameters ($ arrayt)) == vectort{Float64}
40+ @test @constinferred (set_default_type_parameters ($ arrayt, 1 )) == arrayt{Float64}
41+ @test @constinferred (set_default_type_parameters ($ arrayt, $ ((1 , 2 )))) ==
42+ vectort{Float64}
3743 end
3844
3945 @testset " Specify defaults" begin
40- @test @constinferred (specify_default_type_parameters ($ Array, 1 )) == Array{Float64}
41- @test @constinferred (specify_default_type_parameters ($ Array, eltype)) == Array{Float64}
42- @test @constinferred (specify_default_type_parameters ($ Array, 2 )) == Vector
43- @test @constinferred (specify_default_type_parameters ($ Array, ndims)) == Vector
44- @test @constinferred (specify_default_type_parameters ($ Array)) == Vector{Float64}
45- @test @constinferred (specify_default_type_parameters ($ Array, 1 )) == Array{Float64}
46- @test @constinferred (specify_default_type_parameters ($ Array, eltype)) == Array{Float64}
47- @test @constinferred (specify_default_type_parameters ($ Array, 2 )) == Vector
48- @test @constinferred (specify_default_type_parameters ($ Array, ndims)) == Vector
49- @test @constinferred (specify_default_type_parameters ($ Array, $ ((1 , 2 )))) ==
50- Vector{Float64}
51- @test @constinferred (specify_default_type_parameters ($ Array, (eltype, ndims))) ==
52- Vector{Float64}
46+ @test @constinferred (specify_default_type_parameters ($ arrayt, 1 )) == arrayt{Float64}
47+ @test @constinferred (specify_default_type_parameters ($ arrayt, eltype)) ==
48+ arrayt{Float64}
49+ @test @constinferred (specify_default_type_parameters ($ arrayt, 2 )) == vectort
50+ @test @constinferred (specify_default_type_parameters ($ arrayt, ndims)) == vectort
51+ @test @constinferred (specify_default_type_parameters ($ arrayt)) == vectort{Float64}
52+ @test @constinferred (specify_default_type_parameters ($ arrayt, 1 )) == arrayt{Float64}
53+ @test @constinferred (specify_default_type_parameters ($ arrayt, eltype)) ==
54+ arrayt{Float64}
55+ @test @constinferred (specify_default_type_parameters ($ arrayt, 2 )) == vectort
56+ @test @constinferred (specify_default_type_parameters ($ arrayt, ndims)) == vectort
57+ @test @constinferred (specify_default_type_parameters ($ arrayt, $ ((1 , 2 )))) ==
58+ vectort{Float64}
59+ @test @constinferred (specify_default_type_parameters ($ arrayt, (eltype, ndims))) ==
60+ vectort{Float64}
5361 end
5462
5563 @testset " On objects" begin
@@ -60,4 +68,33 @@ using TestExtras: @constinferred
6068 @test @constinferred (default_type_parameters (a, ndims)) == 1
6169 @test @constinferred (default_type_parameters (a)) == (Float64, 1 )
6270 end
71+
72+ @testset " Automatic fallback for defaults" begin
73+ struct MyArray{B,A} <: AbstractArray{A,B} end
74+ @test @constinferred (default_type_parameters (MyArray)) === (1 , Float64)
75+ @test @constinferred (default_type_parameters (MyArray{2 ,Float32})) === (1 , Float64)
76+ @test @constinferred (default_type_parameters ($ MyArray, 1 )) === 1
77+ @test @constinferred (default_type_parameters ($ MyArray, 2 )) === Float64
78+ @test @constinferred (default_type_parameters (MyArray, eltype)) === Float64
79+ @test @constinferred (default_type_parameters (MyArray, ndims)) === 1
80+
81+ und = TypeParameterAccessors. UndefinedDefaultTypeParameter ()
82+
83+ struct MyVector{X,Y,A<: Real } <: AbstractArray{A,1} end
84+ @test @constinferred (default_type_parameters (MyVector)) === (und, und, Float64)
85+ @test_throws ErrorException default_type_parameters (MyVector, 1 )
86+ @test_throws ErrorException default_type_parameters (MyVector, 2 )
87+ @test @constinferred (default_type_parameters ($ MyVector, 3 )) === Float64
88+ @test @constinferred (default_type_parameters (MyVector, eltype)) === Float64
89+ @test_throws ErrorException default_type_parameters (MyVector, ndims)
90+
91+ struct MyBoolArray{X,Y,Z,B} <: AbstractArray{Bool,B} end
92+ @test @constinferred (default_type_parameters (MyBoolArray)) === (und, und, und, 1 )
93+ @test_throws ErrorException default_type_parameters (MyBoolArray, 1 )
94+ @test_throws ErrorException default_type_parameters (MyBoolArray, 2 )
95+ @test_throws ErrorException default_type_parameters (MyBoolArray, 3 )
96+ @test @constinferred (default_type_parameters ($ MyBoolArray, 4 )) === 1
97+ @test_throws ErrorException default_type_parameters (MyBoolArray, eltype)
98+ @test @constinferred (default_type_parameters (MyBoolArray, ndims)) === 1
99+ end
63100end
0 commit comments