TEST(MatrixManipulation, SNIPPET_matrix_manipulation_join) {
    //! [ex_matrix_manipulation_join]
    float hA[] = {1, 2, 3, 4, 5, 6};
    float hB[] = {10, 20, 30, 40, 50, 60, 70, 80, 90};
    array A    = array(3, 2, hA);
    array B    = array(3, 3, hB);

    af_print(join(1, A, B));  // 3x5 matrix
    // array result = join(0, A, B); // fail: dimension mismatch
    //! [ex_matrix_manipulation_join]

    array out = join(1, A, B);
    vector<float> h_out(out.elements());
    out.host(&h_out.front());
    af_print(out);

    ASSERT_EQ(3, out.dims(0));
    ASSERT_EQ(5, out.dims(1));

    unsigned fdim = out.dims(0);
    unsigned sdim = out.dims(1);
    for (unsigned i = 0; i < sdim; i++) {
        for (unsigned j = 0; j < fdim; j++) {
            if (i < 2) {
                ASSERT_FLOAT_EQ(hA[i * fdim + j], h_out[i * fdim + j])
                    << "At [" << i << ", " << j << "]";
            } else {
                ASSERT_FLOAT_EQ(hB[(i - 2) * fdim + j], h_out[i * fdim + j])
                    << "At [" << i << ", " << j << "]";
            }
        }
    }
}
Beispiel #2
0
TEST(Join, JoinLargeDim) {
    using af::constant;
    using af::deviceGC;
    using af::span;

    // const int nx = 32;
    const int nx = 1;
    const int ny = 4 * 1024 * 1024;
    const int nw = 4 * 1024 * 1024;

    deviceGC();
    {
        array in         = randu(nx, ny, u8);
        array joined     = join(0, in, in);
        dim4 in_dims     = in.dims();
        dim4 joined_dims = joined.dims();

        ASSERT_EQ(2 * in_dims[0], joined_dims[0]);
        ASSERT_EQ(0.f, sum<float>((joined(0, span) - joined(1, span)).as(f32)));

        array in2 = constant(1, (dim_t)nx, (dim_t)ny, (dim_t)2, (dim_t)nw, u8);
        joined    = join(3, in, in);
        in_dims   = in.dims();
        joined_dims = joined.dims();
        ASSERT_EQ(2 * in_dims[3], joined_dims[3]);
    }
}
Beispiel #3
0
TEST(JoinMany0, CPP) {
    array a0 = randu(10, 5);
    array a1 = randu(20, 5);
    array a2 = randu(5, 5);

    array output = join(0, a0, a1, a2);
    array gold   = join(0, a0, join(0, a1, a2));

    ASSERT_EQ(sum<float>(output - gold), 0);
}
Beispiel #4
0
TEST(JoinMany1, CPP) {
    array a0 = randu(20, 200);
    array a1 = randu(20, 400);
    array a2 = randu(20, 10);
    array a3 = randu(20, 100);

    int dim      = 1;
    array output = join(dim, a0, a1, a2, a3);
    array gold   = join(dim, a0, join(dim, a1, join(dim, a2, a3)));
    ASSERT_EQ(sum<float>(output - gold), 0);
}
Beispiel #5
0
///////////////////////////////// CPP ////////////////////////////////////
//
TEST(Join, CPP) {
    const unsigned resultIdx = 2;
    const unsigned dim       = 2;

    vector<dim4> numDims;
    vector<vector<float> > in;
    vector<vector<float> > tests;
    readTests<float, float, int>(string(TEST_DIR "/join/join_big.test"),
                                 numDims, in, tests);

    dim4 i0dims = numDims[0];
    dim4 i1dims = numDims[3];

    array input0(i0dims, &(in[0].front()));
    array input1(i1dims, &(in[3].front()));

    array output = join(dim, input0, input1);

    dim4 goldDims = i0dims;
    goldDims[dim] = i0dims[dim] + i1dims[dim];

    ASSERT_VEC_ARRAY_EQ(tests[resultIdx], goldDims, output);
}