|
1 | 1 | using DerivableInterfaces: @interface, DefaultArrayInterface, interface
|
| 2 | +using JLArrays: JLArray, jl |
2 | 3 | using Test: @testset, @test
|
3 | 4 | using TestExtras: @constinferred
|
4 | 5 |
|
|
33 | 34 | end
|
34 | 35 |
|
35 | 36 | @testset "DefaultArrayInterface" begin
|
36 |
| - @test interface(Array) === DefaultArrayInterface{Any}() |
37 |
| - @test interface(Array{Float32}) === DefaultArrayInterface{Any}() |
38 |
| - @test interface(Matrix) === DefaultArrayInterface{2}() |
39 |
| - @test interface(Matrix{Float32}) === DefaultArrayInterface{2}() |
40 |
| - @test DefaultArrayInterface() === DefaultArrayInterface{Any}() |
41 |
| - @test DefaultArrayInterface(Val(2)) === DefaultArrayInterface{2}() |
42 |
| - @test DefaultArrayInterface{Any}(Val(2)) === DefaultArrayInterface{2}() |
43 |
| - @test DefaultArrayInterface{3}(Val(2)) === DefaultArrayInterface{2}() |
| 37 | + @test @constinferred(interface(Array)) === DefaultArrayInterface{Any,Array}() |
| 38 | + @test @constinferred(interface(Array{Float32})) === DefaultArrayInterface{Any,Array}() |
| 39 | + @test @constinferred(interface(Matrix)) === DefaultArrayInterface{2,Array}() |
| 40 | + @test @constinferred(interface(Matrix{Float32})) === DefaultArrayInterface{2,Array}() |
| 41 | + @test @constinferred(DefaultArrayInterface()) === DefaultArrayInterface{Any}() |
| 42 | + @test @constinferred(DefaultArrayInterface(Val(2))) === DefaultArrayInterface{2}() |
| 43 | + @test @constinferred(DefaultArrayInterface{Any}(Val(2))) === DefaultArrayInterface{2}() |
| 44 | + @test @constinferred(DefaultArrayInterface{3}(Val(2))) === DefaultArrayInterface{2}() |
| 45 | + |
| 46 | + # DefaultArrayInterface |
| 47 | + @test @constinferred(interface(AbstractArray)) === DefaultArrayInterface{Any}() |
| 48 | + @test @constinferred(interface(AbstractArray{<:Any,3})) === DefaultArrayInterface{3}() |
| 49 | + @test @constinferred(interface(Array{Float32})) === DefaultArrayInterface{Any,Array}() |
| 50 | + @test @constinferred(interface(Array{Float32,3})) === DefaultArrayInterface{3,Array}() |
| 51 | + @test @constinferred(interface(SubArray{<:Any,<:Any,Array})) === |
| 52 | + DefaultArrayInterface{Any,Array}() |
| 53 | + @test @constinferred(interface(SubArray{<:Any,<:Any,AbstractArray})) === |
| 54 | + DefaultArrayInterface{Any}() |
| 55 | + @test @constinferred(interface(SubArray{<:Any,2,Array})) === |
| 56 | + DefaultArrayInterface{2,Array}() |
| 57 | + @test @constinferred(interface(randn(2, 2))) === DefaultArrayInterface{2,Array}() |
| 58 | + @test @constinferred(interface(view(randn(2, 2), 1:2, 1))) === |
| 59 | + DefaultArrayInterface{1,Array}() |
| 60 | + |
| 61 | + # Combining DefaultArrayInterface |
| 62 | + @test @constinferred(interface(DefaultArrayInterface(), DefaultArrayInterface())) === |
| 63 | + DefaultArrayInterface() |
| 64 | + @test @constinferred( |
| 65 | + interface(DefaultArrayInterface{2}(), DefaultArrayInterface{2}()) |
| 66 | + ) === DefaultArrayInterface{2}() |
| 67 | + @test @constinferred( |
| 68 | + interface(DefaultArrayInterface{2}(), DefaultArrayInterface{3}()) |
| 69 | + ) === DefaultArrayInterface() |
| 70 | + @test @constinferred(interface(DefaultArrayInterface(), DefaultArrayInterface{3}())) === |
| 71 | + DefaultArrayInterface() |
| 72 | + @test @constinferred(interface(randn(2, 2), randn(2, 2))) === |
| 73 | + DefaultArrayInterface{2,Array}() |
| 74 | + @test @constinferred(interface(randn(2, 2), randn(2))) === |
| 75 | + DefaultArrayInterface{Any,Array}() |
| 76 | + @test @constinferred(interface(randn(2, 2), randn(2, 2)')) === |
| 77 | + DefaultArrayInterface{2,Array}() |
44 | 78 | end
|
45 | 79 |
|
46 | 80 | @testset "similar(::DefaultArrayInterface, ...)" begin
|
47 | 81 | a = @constinferred similar(DefaultArrayInterface(), Float32, (2, 2))
|
48 | 82 | @test typeof(a) === Matrix{Float32}
|
49 | 83 | @test size(a) == (2, 2)
|
50 | 84 |
|
| 85 | + a = @constinferred similar(DefaultArrayInterface{Any,Array}(), Float32, (2, 2)) |
| 86 | + @test typeof(a) === Matrix{Float32} |
| 87 | + @test size(a) == (2, 2) |
| 88 | + |
51 | 89 | a = @constinferred similar(DefaultArrayInterface{1}(), Float32, (2, 2))
|
52 | 90 | @test typeof(a) === Matrix{Float32}
|
53 | 91 | @test size(a) == (2, 2)
|
54 | 92 | end
|
55 | 93 |
|
56 | 94 | @testset "Broadcast.DefaultArrayStyle" begin
|
57 |
| - @test interface(Broadcast.DefaultArrayStyle) == DefaultArrayInterface() |
58 |
| - @test interface(Broadcast.DefaultArrayStyle{2}) == DefaultArrayInterface{2}() |
59 |
| - @test interface(Broadcast.Broadcasted(nothing, +, (randn(2), randn(2)))) == |
60 |
| - DefaultArrayInterface{1}() |
| 95 | + @test @constinferred(interface(Broadcast.DefaultArrayStyle)) == DefaultArrayInterface() |
| 96 | + @test @constinferred(interface(Broadcast.DefaultArrayStyle{2})) == |
| 97 | + DefaultArrayInterface{2}() |
| 98 | + @test @constinferred( |
| 99 | + interface(Broadcast.Broadcasted(nothing, +, (randn(2), randn(2)))) |
| 100 | + ) == DefaultArrayInterface{1}() |
| 101 | +end |
| 102 | + |
| 103 | +@testset "DefaultArrayInterface with custom array type" begin |
| 104 | + # ArrayInterface |
| 105 | + a = jl(randn(2, 2)) |
| 106 | + @test @constinferred(interface(JLArray{Float32})) === DefaultArrayInterface{Any,JLArray}() |
| 107 | + @test @constinferred(interface(SubArray{<:Any,2,JLArray{Float32}})) === |
| 108 | + DefaultArrayInterface{2,JLArray}() |
| 109 | + @test @constinferred(interface(a)) === DefaultArrayInterface{2,JLArray}() |
| 110 | + @test @constinferred(interface(a')) === DefaultArrayInterface{2,JLArray}() |
| 111 | + @test @constinferred(interface(view(a, 1:2, 1))) === DefaultArrayInterface{1,JLArray}() |
| 112 | + a′ = @constinferred similar(a, Float32, (2, 3, 3)) |
| 113 | + @test a′ isa JLArray{Float32,3} |
| 114 | + @test size(a′) == (2, 3, 3) |
| 115 | + |
| 116 | + # Combining ArrayInterface |
| 117 | + @test @constinferred( |
| 118 | + interface(DefaultArrayInterface{2,JLArray}(), DefaultArrayInterface{2,JLArray}()) |
| 119 | + ) === DefaultArrayInterface{2,JLArray}() |
| 120 | + @test @constinferred( |
| 121 | + interface(DefaultArrayInterface{2,JLArray}(), DefaultArrayInterface{3,JLArray}()) |
| 122 | + ) === DefaultArrayInterface{Any,JLArray}() |
| 123 | + @test @constinferred( |
| 124 | + interface(DefaultArrayInterface{2,JLArray}(), DefaultArrayInterface{2}()) |
| 125 | + ) === DefaultArrayInterface{2}() |
| 126 | + @test @constinferred( |
| 127 | + interface(DefaultArrayInterface{2,JLArray}(), DefaultArrayInterface{2,Array}()) |
| 128 | + ) === DefaultArrayInterface{2}() |
| 129 | + @test @constinferred( |
| 130 | + interface(DefaultArrayInterface{2}(), DefaultArrayInterface{2,JLArray}()) |
| 131 | + ) === DefaultArrayInterface{2}() |
| 132 | + @test @constinferred( |
| 133 | + interface(DefaultArrayInterface{2,Array}(), DefaultArrayInterface{2,JLArray}()) |
| 134 | + ) === DefaultArrayInterface{2}() |
| 135 | + @test @constinferred( |
| 136 | + interface(DefaultArrayInterface{2,JLArray}(), DefaultArrayInterface{3}()) |
| 137 | + ) === DefaultArrayInterface() |
| 138 | + @test @constinferred( |
| 139 | + interface(DefaultArrayInterface{2,JLArray}(), DefaultArrayInterface{3,Array}()) |
| 140 | + ) === DefaultArrayInterface() |
| 141 | + @test @constinferred( |
| 142 | + interface(DefaultArrayInterface{3}(), DefaultArrayInterface{2,JLArray}()) |
| 143 | + ) === DefaultArrayInterface() |
| 144 | + @test @constinferred( |
| 145 | + interface(DefaultArrayInterface{3,Array}(), DefaultArrayInterface{2,JLArray}()) |
| 146 | + ) === DefaultArrayInterface() |
| 147 | + @test @constinferred(interface(jl(randn(2, 2)), jl(randn(2, 2)))) === |
| 148 | + DefaultArrayInterface{2,JLArray}() |
| 149 | + @test @constinferred(interface(jl(randn(2, 2)), jl(randn(2, 2))')) === |
| 150 | + DefaultArrayInterface{2,JLArray}() |
| 151 | + @test @constinferred(interface(jl(randn(2, 2)), jl(randn(2, 2, 2)))) === |
| 152 | + DefaultArrayInterface{Any,JLArray}() |
| 153 | + @test @constinferred(interface(view(jl(randn(2, 2))', 1:2, 1), jl(randn(2)))) === |
| 154 | + DefaultArrayInterface{1,JLArray}() |
| 155 | + @test @constinferred(interface(randn(2, 2), jl(randn(2, 2)))) === |
| 156 | + DefaultArrayInterface{2}() |
| 157 | + @test @constinferred(interface(randn(2, 2), jl(randn(2)))) === DefaultArrayInterface() |
61 | 158 | end
|
0 commit comments