annotate test/LazyTensors/lazy_array_test.jl @ 712:de2df1214394 feature/selectable_tests

Split testfile for LazyTensors
author Jonatan Werpers <jonatan@werpers.com>
date Sat, 20 Feb 2021 20:59:32 +0100
parents
children 7ef605b8f132
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
712
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 using Test
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 using Sbplib.LazyTensors
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 using Sbplib.RegionIndices
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 @testset "LazyArray" begin
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 @testset "LazyConstantArray" begin
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 @test LazyTensors.LazyConstantArray(3,(3,2)) isa LazyArray{Int,2}
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 lca = LazyTensors.LazyConstantArray(3.0,(3,2))
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 @test eltype(lca) == Float64
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 @test ndims(lca) == 2
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 @test size(lca) == (3,2)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 @test lca[2] == 3.0
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 end
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 struct DummyArray{T,D, T1<:AbstractArray{T,D}} <: LazyArray{T,D}
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 data::T1
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 end
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 Base.size(v::DummyArray) = size(v.data)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 Base.getindex(v::DummyArray{T,D}, I::Vararg{Int,D}) where {T,D} = v.data[I...]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 # Test lazy operations
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 v1 = [1, 2.3, 4]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 v2 = [1., 2, 3]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 s = 3.4
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 r_add_v = v1 .+ v2
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 r_sub_v = v1 .- v2
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 r_times_v = v1 .* v2
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 r_div_v = v1 ./ v2
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 r_add_s = v1 .+ s
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 r_sub_s = v1 .- s
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 r_times_s = v1 .* s
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 r_div_s = v1 ./ s
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 @test isa(v1 +̃ v2, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 @test isa(v1 -̃ v2, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 @test isa(v1 *̃ v2, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 @test isa(v1 /̃ v2, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 @test isa(v1 +̃ s, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 @test isa(v1 -̃ s, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 @test isa(v1 *̃ s, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 @test isa(v1 /̃ s, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 @test isa(s +̃ v1, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 @test isa(s -̃ v1, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 @test isa(s *̃ v1, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 @test isa(s /̃ v1, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 for i ∈ eachindex(v1)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 @test (v1 +̃ v2)[i] == r_add_v[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 @test (v1 -̃ v2)[i] == r_sub_v[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 @test (v1 *̃ v2)[i] == r_times_v[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 @test (v1 /̃ v2)[i] == r_div_v[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 @test (v1 +̃ s)[i] == r_add_s[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 @test (v1 -̃ s)[i] == r_sub_s[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 @test (v1 *̃ s)[i] == r_times_s[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 @test (v1 /̃ s)[i] == r_div_s[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 @test (s +̃ v1)[i] == r_add_s[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 @test (s -̃ v1)[i] == -r_sub_s[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 @test (s *̃ v1)[i] == r_times_s[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 @test (s /̃ v1)[i] == 1/r_div_s[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 end
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 @test_throws BoundsError (v1 +̃ v2)[4]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 v2 = [1., 2, 3, 4]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 # Test that size of arrays is asserted when not specified inbounds
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 # TODO: Replace these errors with SizeMismatch
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 @test_throws DimensionMismatch v1 +̃ v2
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 # Test operations on LazyArray
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 v1 = DummyArray([1, 2.3, 4])
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 v2 = [1., 2, 3]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 @test isa(v1 + v2, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 @test isa(v2 + v1, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 @test isa(v1 - v2, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 @test isa(v2 - v1, LazyArray)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 for i ∈ eachindex(v2)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 @test (v1 + v2)[i] == (v2 + v1)[i] == r_add_v[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 @test (v1 - v2)[i] == -(v2 - v1)[i] == r_sub_v[i]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 end
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 @test_throws BoundsError (v1 + v2)[4]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 v2 = [1., 2, 3, 4]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 # Test that size of arrays is asserted when not specified inbounds
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 # TODO: Replace these errors with SizeMismatch
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 @test_throws DimensionMismatch v1 + v2
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 end
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 @testset "LazyFunctionArray" begin
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 @test LazyFunctionArray(i->i^2, (3,)) == [1,4,9]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87 @test LazyFunctionArray((i,j)->i*j, (3,2)) == [
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 1 2;
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 2 4;
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 3 6;
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 ]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
92
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 @test size(LazyFunctionArray(i->i^2, (3,))) == (3,)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
94 @test size(LazyFunctionArray((i,j)->i*j, (3,2))) == (3,2)
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 @inferred LazyFunctionArray(i->i^2, (3,))[2]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98 @test_throws BoundsError LazyFunctionArray(i->i^2, (3,))[4]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
99 @test_throws BoundsError LazyFunctionArray((i,j)->i*j, (3,2))[4,2]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
100 @test_throws BoundsError LazyFunctionArray((i,j)->i*j, (3,2))[2,3]
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
101
de2df1214394 Split testfile for LazyTensors
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
102 end