annotate test/LazyTensors/lazy_array_test.jl @ 877:dd2ab001a7b6 feature/equidistant_grid/refine

Implement refine function, move exports to the top of the file, change location of constuctors. The constructors were changed have only one inner constructor and simpler outer constructors.
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 14 Feb 2022 09:39:58 +0100
parents de2df1214394
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