1+ using Test
2+ using PartitionedArrays
3+ using Adapt
4+
5+ struct FakeCuVector{A} <: AbstractVector{Float64}
6+ vector:: A
7+ end
8+
9+ Base. size(v:: FakeCuVector ) = size(v. vector)
10+ Base. getindex(v:: FakeCuVector ,i:: Integer ) = v. vector[i]
11+
12+ function Adapt. adapt_storage(:: Type{<:FakeCuVector} ,x:: AbstractArray )
13+ FakeCuVector(x)
14+ end
15+
16+ function adapt_tests(distribute)
17+
18+ rank = distribute(LinearIndices((2 ,2 )))
19+
20+ a = [[1 ,2 ],[3 ,4 ,5 ],Int[],[3 ,4 ]]
21+ b = JaggedArray(a)
22+ c = deepcopy(b)
23+
24+ c = Adapt. adapt(FakeCuVector,c)
25+
26+ @test typeof(c. data) == FakeCuVector{typeof(b. data)}
27+ @test typeof(c. ptrs) == FakeCuVector{typeof(b. ptrs)}
28+ @test typeof(c). name. wrapper == GenericJaggedArray
29+
30+ a = [1 ,2 ,3 ,4 ,5 ]
31+ b = deepcopy(a)
32+ b = Adapt. adapt(FakeCuVector,b)
33+ @test typeof(b) == FakeCuVector{typeof(a)}
34+ @test b. vector == a
35+
36+ own = [1 ,2 ,3 ,4 ]
37+ ghost = [5 ,6 ,7 ,8 ]
38+ block_a = split_vector_blocks(own, ghost)
39+ block_b = deepcopy(block_a)
40+ block_b = Adapt. adapt(FakeCuVector,block_b)
41+ @test block_b. own. vector == block_a. own
42+ @test block_b. ghost. vector == block_a. ghost
43+ @test typeof(block_b. own) == FakeCuVector{typeof(block_a. own)}
44+ @test typeof(block_b. ghost) == FakeCuVector{typeof(block_a. ghost)}
45+
46+
47+ a = split_vector(block_a,[1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ])
48+ b = deepcopy(a)
49+ b = Adapt. adapt(FakeCuVector,b)
50+
51+ @test b. blocks. own. vector == a. blocks. own
52+ @test b. blocks. ghost. vector == a. blocks. ghost
53+ @test b. permutation. vector == a. permutation
54+
55+
56+ a = distribute([[1 ,1 ,1 ],[2 ,2 ,2 ],[3 ,3 ,3 ],[4 ,4 ,4 ]])
57+ b = distribute([[1 ,1 ,1 ],[2 ,2 ,2 ],[3 ,3 ,3 ],[4 ,4 ,4 ]])
58+ b = Adapt. adapt(FakeCuVector,b)
59+
60+ map(a,b) do val_a,val_b
61+ @test typeof(val_b) == FakeCuVector{typeof(val_a)}
62+ @test val_b. vector == val_a
63+ end
64+ end
0 commit comments