Пример #1
0
void Vector3iTest::testEquals()
{
	Vector3i inputA(-1, 22, -90);
	Vector3i inputB(-1, 22, -90);
	Vector3i inputC(42, -32, 0);
	
	CPPUNIT_ASSERT(inputA == inputB);
	CPPUNIT_ASSERT(inputA != inputC);
	
	CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT(inputA != inputB) );
	CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT(inputA == inputC) );
}
Пример #2
0
void Vector3iTest::testDeterminant()
{
	Vector3i inputA(-3, 2, 8);
	Vector3i inputB(6, 43, -12);
	Vector3i inputC(-1, 22, -90);
	
	int expected = 13322;
	
	int actual = Vector3i::determinant(inputA, inputB, inputC);
	
	CPPUNIT_ASSERT_EQUAL(expected, actual);
}
Пример #3
0
int main(void)
{
	cl::Program addProgram(
        cl::STRING_CLASS(
		"int add(int a, int b) { return a + b; }")
		, false);
	cl::Program vectorWrapper(
        cl::STRING_CLASS(
		"int add(int a, int b); kernel void vectorAdd(global const int *inputA, global const int *inputB, global int *output){output[get_global_id(0)] = add(inputA[get_global_id(0)], inputB[get_global_id(0)]);}")
		, false);
	std::vector<cl::Program> programs;
	addProgram.compile();
	vectorWrapper.compile();		
	
    cl::STRING_CLASS s = addProgram.getInfo<CL_PROGRAM_SOURCE>();
    
	programs.push_back(addProgram);
	programs.push_back(vectorWrapper);
	cl::Program vectorAddProgram = cl::linkProgram(programs);

    auto vectorAddKernel = 
        cl::make_kernel<
            cl::Buffer&,
            cl::Buffer&,
            cl::Buffer&
            >( vectorAddProgram, "vectorAdd" );


    std::vector<int> inputA(numElements, 1);
    std::vector<int> inputB(numElements, 2);
    std::vector<int> output(numElements, 0xdeadbeef);
    cl::Buffer inputABuffer(begin(inputA), end(inputA), true);
    cl::Buffer inputBBuffer(begin(inputB), end(inputB), true);
    cl::Buffer outputBuffer(begin(output), end(output), false);

    vectorAddKernel(
        cl::EnqueueArgs(
            cl::NDRange(numElements),
            cl::NDRange(numElements)),
        inputABuffer,
        inputBBuffer,
        outputBuffer);

    cl::copy(outputBuffer, begin(output), end(output));

    std::cout << "Output:\n";
    for( int i = 1; i < numElements; ++i ) {
        std::cout << "\t" << output[i] << "\n";
    }
    std::cout << "\n\n";

}
Пример #4
0
void Vector3fTest::testDeterminant()
{
	Vector3f inputA(-3.3f, 2.2f, 8.8f);
	Vector3f inputB(-5.0f, 7.0f, 18.0f);
	Vector3f inputC(6.6f, 43.43f, -12.12f);
	
	float expected = 670.274f;
	float largeDelta = 0.0002f;
	float smallDelta = 0.000005f;
	
	float actual = Vector3f::determinant(inputA, inputB, inputC);
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, largeDelta);
	CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, smallDelta) );
}
Пример #5
0
void Vector3fTest::testLength()
{
	Vector3f inputA(-3.3f, 2.2f, 8.8f);
	
	float expectedA = 9.652460826f;
	float delta = 0.000005f;
	
	float actualA = inputA.length();
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedA, actualA, delta);
	
	Vector3f inputB;
	
	float expectedB = 0.0f;
	
	float actualB = inputB.length();
	
	CPPUNIT_ASSERT_EQUAL(expectedB, actualB);
}
Пример #6
0
void Vector3fTest::testSubtraction()
{
	Vector3f inputA(-3.3f, 2.2f, 8.8f);
	Vector3f inputB(6.6f, 43.43f, -12.12f);
	
	Vector3f expected(-9.9f, -41.23f, 20.92f);
	
	Vector3f actual = inputA - inputB;
	float delta = 0.000005f;
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.x, actual.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.y, actual.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.z, actual.z, delta);
	
	inputA -= inputB;
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.x, inputA.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.y, inputA.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.z, inputA.z, delta);
}
Пример #7
0
void Vector3fTest::testAddition()
{
	Vector3f inputA(-3.3f, 2.2f, 8.8f);
	Vector3f inputB(6.6f, 43.43f, -12.12f);
	
	Vector3f expected(3.3f, 45.63f, -3.32f);
	
	Vector3f actual = inputA + inputB;
	float delta = 0.000005f;
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.x, actual.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.y, actual.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.z, actual.z, delta);
	
	inputA += inputB;
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.x, inputA.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.y, inputA.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.z, inputA.z, delta);
}
Пример #8
0
void Vector3iTest::testDotProduct()
{
	Vector3i inputA(-3, 2, 8);
	Vector3i inputB(6, 43, -12);
	
	int expectedInt = -28;
	
	int actualInt = inputA.dot(inputB);
	
	CPPUNIT_ASSERT_EQUAL(expectedInt, actualInt);
	
	Vector3f inputC(6.6f, 43.43f, -12.12);
	
	float expectedFloat = -29.9f;
	float delta = 0.000005f;
	
	float actualFloat = inputA.dot(inputC);
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedFloat, actualFloat, delta);
}
Пример #9
0
void Vector3fTest::testDotProduct()
{
	Vector3f inputA(-3.3f, 2.2f, 8.8f);
	Vector3f inputB(-5.0f, 7.0f, 18.0f);
	
	float expected = 190.3f;
	float largeDelta = 0.0002f;
	float smallDelta = 0.000005f;
	
	float actualA = inputA.dot(inputB);
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actualA, largeDelta);
	CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actualA, smallDelta) );
	
	Vector3i inputC(-5, 7, 18);
	
	float actualB = inputA.dot(inputC);
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actualB, largeDelta);
	CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actualB, smallDelta) );
}
Пример #10
0
void Vector3fTest::testLengthInverse()
{
	Vector3f inputA(-3.3f, 2.2f, 8.8f);
	
	float expectedA = 0.103600524f;
	float largeDelta = 0.0002f;
	float smallDelta = 0.000005f;
	
	float actualA = inputA.length_inverse();
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedA, actualA, largeDelta);
	CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedA, actualA, smallDelta) );
	
	Vector3f inputB;
	
	float expectedB = 0.0f;
	
	float actualB = inputB.length_inverse();
	
	CPPUNIT_ASSERT_EQUAL(expectedB, actualB);
}
Пример #11
0
void Vector3iTest::testCrossProduct()
{
	Vector3i inputA(-3, 2, 8);
	Vector3i inputB(6, 43, -12);
	
	Vector3i expectedInt(-368, 12, -141);
	
	Vector3i actualInt = inputA.cross(inputB);
	
	CPPUNIT_ASSERT(expectedInt == actualInt);
	
	Vector3f inputC(6.6f, 43.43f, -12.12f);
	
	Vector3f expectedFloat(-371.68f, 16.44f, -143.49f);
	float delta = 0.000005f;
	
	Vector3f actualFloat = inputA.cross(inputC);
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedFloat.x, actualFloat.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedFloat.y, actualFloat.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedFloat.z, actualFloat.z, delta);
}
Пример #12
0
void Vector3fTest::testCrossProduct()
{
	Vector3f inputA(-3.3f, 2.2f, 8.8f);
	Vector3f inputB(-5.0f, 7.0f, 18.0f);
	
	Vector3f expected(-22.0f, 15.4f, -12.1f);
	float delta = 0.000005f;
	
	Vector3f actualA = inputA.cross(inputB);
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.x, actualA.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.y, actualA.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.z, actualA.z, delta);
	
	Vector3i inputC(-5, 7, 18);
	
	Vector3f actualB = inputA.cross(inputC);
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.x, actualB.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.y, actualB.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expected.z, actualB.z, delta);
}
Пример #13
0
void Vector3fTest::testScaling()
{
	Vector3f inputA(-3.3f, 2.2f, 8.8f);
	float inputFactor = 5.64f;
	
	Vector3f expectedA(-18.612f, 12.408f, 49.632f);
	float delta = 0.000005f;
	
	Vector3f actualA = inputA * inputFactor;
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedA.x, actualA.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedA.y, actualA.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedA.z, actualA.z, delta);
	
	inputA *= inputFactor;
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedA.x, inputA.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedA.y, inputA.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedA.z, inputA.z, delta);
	
	Vector3f inputB(-3.3f, 2.2f, 8.8f);
	
	Vector3f expectedB(-0.585106382978723f, 0.390070921985816f, 1.56028368794326f);
	
	Vector3f actualB = inputB / inputFactor;
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedB.x, actualB.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedB.y, actualB.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedB.z, actualB.z, delta);
	
	inputB /= inputFactor;
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedB.x, inputB.x, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedB.y, inputB.y, delta);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(expectedB.z, inputB.z, delta);
}