예제 #1
0
TEST(hsv_rgb, InvalidArray) {
    vector<float> in(100, 1);

    dim4 dims(100);
    array input(dims, &(in.front()));

    try {
        array output = hsv2rgb(input);
        ASSERT_EQ(true, false);
    } catch (exception) {
        ASSERT_EQ(true, true);
        return;
    }
}
예제 #2
0
TEST(hsv2rgb, CPP) {
    vector<dim4> numDims;
    vector<vector<float> > in;
    vector<vector<float> > tests;

    readTestsFromFile<float, float>(string(TEST_DIR "/hsv_rgb/hsv2rgb.test"),
                                    numDims, in, tests);

    dim4 dims = numDims[0];
    array input(dims, &(in[0].front()));
    array output = hsv2rgb(input);

    vector<float> currGoldBar = tests[0];
    ASSERT_VEC_ARRAY_NEAR(currGoldBar, dims, output, 1.0e-3);
}
예제 #3
0
TEST(hsv2rgb, MaxDim) {
    vector<dim4> numDims;
    vector<vector<float> > in;
    vector<vector<float> > tests;

    readTestsFromFile<float, float>(string(TEST_DIR "/hsv_rgb/hsv2rgb.test"),
                                    numDims, in, tests);

    dim4 dims = numDims[0];
    array input(dims, &(in[0].front()));

    const size_t largeDim = 65535 * 16 + 1;
    unsigned int ntile    = (largeDim + dims[1] - 1) / dims[1];
    input                 = tile(input, 1, ntile);
    array output          = hsv2rgb(input);
    dim4 outDims          = output.dims();

    float *outData = new float[outDims.elements()];
    output.host((void *)outData);

    vector<float> currGoldBar = tests[0];
    for (int z = 0; z < outDims[2]; ++z) {
        for (int y = 0; y < outDims[1]; ++y) {
            for (int x = 0; x < outDims[0]; ++x) {
                int outIter =
                    (z * outDims[1] * outDims[0]) + (y * outDims[0]) + x;
                int goldIter =
                    (z * dims[1] * dims[0]) + ((y % dims[1]) * dims[0]) + x;
                ASSERT_NEAR(currGoldBar[goldIter], outData[outIter], 1.0e-3)
                    << "at: " << outIter << endl;
            }
        }
    }

    // cleanup
    delete[] outData;
}