-
Notifications
You must be signed in to change notification settings - Fork 239
/
Copy patharray.jl
143 lines (124 loc) · 8.32 KB
/
array.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using CUDA.CUSPARSE
using SparseArrays
using Test
typeSet = [Float32, Float64, ComplexF32, ComplexF64]
n = 10
@testset "similar" begin
@testset "similar(A::$h{$elty},Tv::$newElty)" for elty in typeSet,
newElty in typeSet,
(h,dimPtr,dimVal) in ((CuSparseMatrixCSR,:rowPtr,:colVal), (CuSparseMatrixCSC,:colPtr,:rowVal))
A = sprand(elty, n, n, rand())
dA = h(A)
C_simple = similar(dA)
C_dims = similar(dA,(n,n+1))
C_eltype = similar(dA,newElty)
C_full = similar(dA,newElty,(n,n+1))
@test typeof(C_simple) == typeof(dA)
@test typeof(C_dims) == typeof(dA)
@test (typeof(C_eltype) == typeof(dA) && elty==newElty) || ((typeof(C_eltype) != typeof(dA) && elty!=newElty))
@test (typeof(C_full) == typeof(dA) && elty==newElty) || ((typeof(C_full) != typeof(dA) && elty!=newElty))
properties = Set(propertynames(dA));
conserved_simple = Set([dimPtr,dimVal,:dims,:nnz])
structure_conserved_simple = setdiff(properties,conserved_simple);
@testset "similar(A::$h{$elty},Tv::$newElty) $propertyname simple conserved" for propertyname in conserved_simple
@test getproperty(C_simple,propertyname) == getproperty(dA,propertyname)
end
@testset "similar(A::$h{$elty},Tv::$newElty) $propertyname simple structure conserved" for propertyname in structure_conserved_simple
@test length(getproperty(C_simple,propertyname)) == length(getproperty(dA,propertyname))
@test eltype(getproperty(C_simple,propertyname)) == eltype(getproperty(dA,propertyname))
end
conserved_dims = Set([:nnz])
if h==CuSparseMatrixCSR # Making the array one column longer increases colPtr length but not rowPtr length
structure_conserved_dims = setdiff(properties,union(conserved_dims,Set([dimVal,:dims])))
else #CSC
structure_conserved_dims = setdiff(properties,union(conserved_dims,Set([dimVal,:dims,dimPtr])))
@test length(getproperty(C_dims,dimPtr)) == length(getproperty(dA,dimPtr)) + 1
@test eltype(getproperty(C_dims,dimPtr)) == eltype(getproperty(dA,dimPtr))
end
@test getproperty(C_dims,:dims) == (n,n+1)
@testset "similar(A::$h{$elty},Tv::$newElty) $propertyname dims conserved" for propertyname in conserved_dims
@test getproperty(C_dims,propertyname) == getproperty(dA,propertyname)
end
@testset "similar(A::$h{$elty},Tv::$newElty) $propertyname dims structure conserved" for propertyname in structure_conserved_dims
@test length(getproperty(C_dims,propertyname)) == length(getproperty(dA,propertyname))
@test eltype(getproperty(C_dims,propertyname)) == eltype(getproperty(dA,propertyname))
end
conserved_eltype = Set([:nnz,:dims,dimPtr,dimVal])
structure_conserved_eltype = setdiff(properties,union(conserved_eltype,[:nzVal]))
@test eltype(getproperty(C_eltype,:nzVal)) == newElty
@test length(getproperty(C_eltype,:nzVal)) == length(getproperty(dA,:nzVal))
@testset "similar(A::$h{$elty},Tv::$newElty) $propertyname elty conserved" for propertyname in conserved_eltype
@test getproperty(C_eltype,propertyname) == getproperty(dA,propertyname)
end
@testset "similar(A::$h{$elty},Tv::$newElty) $propertyname elty structure conserved" for propertyname in structure_conserved_eltype
@test length(getproperty(C_eltype,propertyname)) == length(getproperty(dA,propertyname))
@test eltype(getproperty(C_eltype,propertyname)) == eltype(getproperty(dA,propertyname))
end
@testset "similar(A::$h{$elty},Tv::$newElty) full" begin
@test eltype(getproperty(C_full,:nzVal)) == newElty
@test length(getproperty(C_full,:nzVal)) == length(getproperty(dA,:nzVal))
@test h==CuSparseMatrixCSR ? length(getproperty(C_full,dimPtr)) == length(getproperty(dA,dimPtr)) : length(getproperty(C_full,dimPtr)) == length(getproperty(dA,dimPtr))+1
@test getproperty(C_dims,:nnz) == getproperty(dA,:nnz)
@test getproperty(C_full,:dims) == (n,n+1)
end
end
@testset "similar(A::$f($h{$elty}),$newElty)" for elty in typeSet,
newElty in typeSet,
f in (transpose, x->reshape(x,n,n)),
(h,dimPtr,dimVal) in ((CuSparseMatrixCSR,:rowPtr,:colVal), (CuSparseMatrixCSC,:colPtr,:rowVal))
A = sprand(elty, n, n, rand())
dA = f(h(A))
C_simple = similar(dA)
C_dims = similar(dA,(n,n+1))
C_eltype = similar(dA,newElty)
C_full = similar(dA,newElty,(n,n+1))
@test typeof(C_simple) == typeof(parent(dA))
@test typeof(C_dims) == typeof(parent(dA))
@test (typeof(C_eltype) == typeof(parent(dA)) && elty==newElty) || ((typeof(C_eltype) != typeof(parent(dA)) && elty!=newElty))
@test (typeof(C_full) == typeof(parent(dA)) && elty==newElty) || ((typeof(C_full) != typeof(parent(dA)) && elty!=newElty))
properties = Set(propertynames(parent(dA)));
conserved_simple = Set([:nnz])
structure_conserved_simple = setdiff(properties,conserved_simple);
@testset "similar(A::$f($h{$elty}),$newElty) $propertyname simple conserved" for propertyname in conserved_simple
@test getproperty(C_simple,propertyname) == getproperty(parent(dA),propertyname)
end
@testset "similar(A::$f($h{$elty}),$newElty) $propertyname simple structure conserved" for propertyname in structure_conserved_simple
@test length(getproperty(C_simple,propertyname)) == length(getproperty(parent(dA),propertyname))
@test eltype(getproperty(C_simple,propertyname)) == eltype(getproperty(parent(dA),propertyname))
end
conserved_dims = Set([:nnz])
if h==CuSparseMatrixCSR
structure_conserved_dims = setdiff(properties,union(conserved_dims,Set([dimVal,:dims])))
else #CSC
structure_conserved_dims = setdiff(properties,union(conserved_dims,Set([dimVal,:dims,dimPtr])))
@test length(getproperty(C_dims,dimPtr)) == length(getproperty(parent(dA),dimPtr)) + 1
@test eltype(getproperty(C_dims,dimPtr)) == eltype(getproperty(parent(dA),dimPtr))
end
@test getproperty(C_dims,:dims) == (n,n+1)
@testset "similar(A::$f($h{$elty}),$newElty) $propertyname dims conserved" for propertyname in conserved_dims
@test getproperty(C_dims,propertyname) == getproperty(parent(dA),propertyname)
end
@testset "similar(A::$f($h{$elty}),$newElty) $propertyname dims structure conserved" for propertyname in structure_conserved_dims
@test length(getproperty(C_dims,propertyname)) == length(getproperty(parent(dA),propertyname))
@test eltype(getproperty(C_dims,propertyname)) == eltype(getproperty(parent(dA),propertyname))
end
conserved_eltype = Set([:nnz,:dims])
structure_conserved_eltype = setdiff(properties,union(conserved_eltype,[:nzVal]))
@test eltype(getproperty(C_eltype,:nzVal)) == newElty
@test length(getproperty(C_eltype,:nzVal)) == length(getproperty(parent(dA),:nzVal))
@testset "similar(A::$f($h{$elty}),$newElty) $propertyname elty conserved" for propertyname in conserved_eltype
@test getproperty(C_eltype,propertyname) == getproperty(parent(dA),propertyname)
end
@testset "similar(A::$f($h{$elty}),$newElty) $propertyname elty structure conserved" for propertyname in structure_conserved_eltype
@test length(getproperty(C_eltype,propertyname)) == length(getproperty(parent(dA),propertyname))
@test eltype(getproperty(C_eltype,propertyname)) == eltype(getproperty(parent(dA),propertyname))
end
@testset "similar(A::$f($h{$elty}),$newElty) full" begin
@test eltype(getproperty(C_full,:nzVal)) == newElty
@test length(getproperty(C_full,:nzVal)) == length(getproperty(parent(dA),:nzVal))
@test h==CuSparseMatrixCSR ? length(getproperty(C_full,dimPtr)) == length(getproperty(parent(dA),dimPtr)) : length(getproperty(C_full,dimPtr)) == (length(getproperty(parent(dA),dimPtr))+1)
@test getproperty(C_dims,:nnz) == getproperty(parent(dA),:nnz)
@test getproperty(C_full,:dims) == (n,n+1)
end
end
end