@@ -62,14 +62,8 @@ void TestArray1() {
62
62
MemoryCopy (static_cast <void *>(array_data),
63
63
static_cast <void *>(data.data ()),
64
64
array.Dim () * array.ElementSize (), kind);
65
- // copy data from CPU/GPU to CPU
66
- kind = GetMemoryCopyKind (*array.Context (), *cpu);
67
- std::vector<T> cpu_data (array.Dim ());
68
- MemoryCopy (static_cast <void *>(cpu_data.data ()),
69
- static_cast <const void *>(array_data),
70
- array.Dim () * array.ElementSize (), kind);
71
65
for (int32_t i = 0 ; i < array.Dim (); ++i) {
72
- EXPECT_EQ (cpu_data [i], i);
66
+ EXPECT_EQ (array [i], i);
73
67
}
74
68
}
75
69
@@ -79,32 +73,30 @@ void TestArray1() {
79
73
ASSERT_EQ (array.Dim (), 5 );
80
74
// operator=(T t)
81
75
array = 2 ;
82
- // copy data from CPU/GPU to CPU
83
- const T *array_data = array.Data ();
84
- auto kind = GetMemoryCopyKind (*array.Context (), *cpu);
85
- std::vector<T> cpu_data (array.Dim ());
86
- MemoryCopy (static_cast <void *>(cpu_data.data ()),
87
- static_cast <const void *>(array_data),
88
- array.Dim () * array.ElementSize (), kind);
89
76
for (int32_t i = 0 ; i < array.Dim (); ++i) {
90
- EXPECT_EQ (cpu_data[i], 2 );
91
77
EXPECT_EQ (array[i], 2 );
92
78
}
93
79
}
94
80
95
81
{
96
82
// created with Array1(ContextPtr, int32_t size, T elem)
97
- Array1<T> array (context, 5 , 2 );
83
+ Array1<T> array (context, 5 , T ( 2 ) );
98
84
ASSERT_EQ (array.Dim (), 5 );
99
85
// copy data from CPU/GPU to CPU
100
- const T *array_data = array.Data ();
101
- auto kind = GetMemoryCopyKind (*array.Context (), *cpu);
102
- std::vector<T> cpu_data (array.Dim ());
103
- MemoryCopy (static_cast <void *>(cpu_data.data ()),
104
- static_cast <const void *>(array_data),
105
- array.Dim () * array.ElementSize (), kind);
106
86
for (int32_t i = 0 ; i < array.Dim (); ++i) {
107
- EXPECT_EQ (cpu_data[i], 2 );
87
+ EXPECT_EQ (array[i], 2 );
88
+ }
89
+ }
90
+
91
+ {
92
+ // created with Array1(ContextPtr, int32_t size, Callable &&callable)
93
+ auto lambda_set_values = [] __host__ __device__ (int32_t i) -> T {
94
+ return i * i;
95
+ };
96
+ Array1<T> array (context, 5 , lambda_set_values);
97
+ ASSERT_EQ (array.Dim (), 5 );
98
+ for (int32_t i = 0 ; i < array.Dim (); ++i) {
99
+ EXPECT_EQ (array[i], i * i);
108
100
}
109
101
}
110
102
@@ -114,15 +106,8 @@ void TestArray1() {
114
106
std::iota (data.begin (), data.end (), 0 );
115
107
Array1<T> array (context, data);
116
108
ASSERT_EQ (array.Dim (), 5 );
117
- // copy data from CPU/GPU to CPU
118
- const T *array_data = array.Data ();
119
- auto kind = GetMemoryCopyKind (*array.Context (), *cpu);
120
- std::vector<T> cpu_data (array.Dim ());
121
- MemoryCopy (static_cast <void *>(cpu_data.data ()),
122
- static_cast <const void *>(array_data),
123
- array.Dim () * array.ElementSize (), kind);
124
109
for (int32_t i = 0 ; i < array.Dim (); ++i) {
125
- EXPECT_EQ (cpu_data [i], data[i]);
110
+ EXPECT_EQ (array [i], data[i]);
126
111
}
127
112
}
128
113
@@ -135,15 +120,8 @@ void TestArray1() {
135
120
int32_t size = 6 ;
136
121
Array1<T> sub_array = array.Range (start, size);
137
122
ASSERT_EQ (sub_array.Dim (), size);
138
- // copy data from CPU/GPU to CPU
139
- const T *sub_array_data = sub_array.Data ();
140
- auto kind = GetMemoryCopyKind (*sub_array.Context (), *cpu);
141
- std::vector<T> cpu_data (sub_array.Dim ());
142
- MemoryCopy (static_cast <void *>(cpu_data.data ()),
143
- static_cast <const void *>(sub_array_data),
144
- sub_array.Dim () * sub_array.ElementSize (), kind);
145
123
for (int32_t i = 0 ; i < sub_array.Dim (); ++i) {
146
- EXPECT_EQ (cpu_data [i], data[i + start]);
124
+ EXPECT_EQ (sub_array [i], data[i + start]);
147
125
}
148
126
}
149
127
@@ -239,16 +217,9 @@ void TestArray1() {
239
217
Array1<int32_t > indexes_array (context, indexes);
240
218
std::vector<T> expected_data = {1 , 2 , 3 , 6 , 2 , 7 , 9 , 10 , 3 , 5 , 7 , 4 };
241
219
Array1<T> ans_array = array[indexes_array];
242
- // copy data from CPU/GPU to CPU
243
220
ASSERT_EQ (ans_array.Dim (), expected_data.size ());
244
- const T *ans_array_data = ans_array.Data ();
245
- auto kind = GetMemoryCopyKind (*ans_array.Context (), *cpu);
246
- std::vector<T> cpu_data (ans_array.Dim ());
247
- MemoryCopy (static_cast <void *>(cpu_data.data ()),
248
- static_cast <const void *>(ans_array_data),
249
- ans_array.Dim () * ans_array.ElementSize (), kind);
250
221
for (int32_t i = 0 ; i < ans_array.Dim (); ++i) {
251
- EXPECT_EQ (cpu_data [i], expected_data[i]);
222
+ EXPECT_EQ (ans_array [i], expected_data[i]);
252
223
}
253
224
}
254
225
@@ -272,14 +243,9 @@ void TestArray1() {
272
243
EXPECT_EQ (array.Dim (), new_size);
273
244
// copy data from CPU/GPU to CPU
274
245
const T *array_data = array.Data ();
275
- auto kind = GetMemoryCopyKind (*array.Context (), *cpu);
276
- std::vector<T> cpu_data (array.Dim ());
277
- MemoryCopy (static_cast <void *>(cpu_data.data ()),
278
- static_cast <const void *>(array_data),
279
- array.Dim () * array.ElementSize (), kind);
280
246
// data.size() == 5, array.Dim() == 8, there are 3 uninitialized elements.
281
247
for (int32_t i = 0 ; i < data.size (); ++i) {
282
- EXPECT_EQ (cpu_data [i], data[i]);
248
+ EXPECT_EQ (array [i], data[i]);
283
249
}
284
250
}
285
251
}
0 commit comments