MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / TEST_P

Function TEST_P

test/topk.cpp:367–409  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

365}
366
367TEST_P(TopKParams, CPP) {
368 topk_params params = GetParam();
369 int d0 = params.d0;
370 int d1 = params.d1;
371 int k = params.k;
372 int dim = params.dim;
373 topkFunction order = params.order;
374
375 array in = iota(dim4(d0, d1));
376
377 // reverse the array if the order is ascending
378 if (order == AF_TOPK_MIN) { in = -in + (d0 * d1 - 1); }
379 array val, idx;
380 topk(val, idx, in, k, dim, order);
381
382 vector<float> hval(k * d1);
383 vector<unsigned> hidx(k * d1);
384 val.host(&hval[0]);
385 idx.host(&hidx[0]);
386
387 if (order == AF_TOPK_MIN) {
388 for (int j = d1 - 1, i = 0; j > 0; j--) {
389 for (int kidx = 0, goldidx = d0 - 1; kidx < k;
390 i++, kidx++, goldidx--) {
391 float gold = static_cast<float>(j * d0 + kidx);
392 ASSERT_FLOAT_EQ(gold, hval[i])
393 << print_context(i, kidx, hval, hidx);
394 ASSERT_EQ(goldidx, hidx[i])
395 << print_context(i, kidx, hval, hidx);
396 }
397 }
398 } else {
399 for (int ii = 0, i = 0; ii < d1; ii++) {
400 for (int j = d0 - 1; j >= d0 - k; --j, i++) {
401 float gold = static_cast<float>(ii * d0 + j);
402 int goldidx = j;
403 ASSERT_FLOAT_EQ(gold, hval[i])
404 << print_context(i, j, hval, hidx);
405 ASSERT_EQ(goldidx, hidx[i]) << print_context(i, j, hval, hidx);
406 }
407 }
408 }
409}
410
411TEST(TopK, KGreaterThan256) {
412 af::array a = af::randu(500);

Callers

nothing calls this directly

Calls 5

print_contextFunction · 0.85
hostMethod · 0.80
iotaFunction · 0.50
dim4Class · 0.50
topkFunction · 0.50

Tested by

no test coverage detected