From 01643e7f9ad702d5aa9c5ccea7740a83ee2fcf83 Mon Sep 17 00:00:00 2001 From: Kyle Lutz Date: Tue, 30 Dec 2014 16:12:55 -0800 Subject: [PATCH] Add test for equality with std::accumulate() --- test/test_accumulate.cpp | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/test/test_accumulate.cpp b/test/test_accumulate.cpp index 0ecfedda..09165d56 100644 --- a/test/test_accumulate.cpp +++ b/test/test_accumulate.cpp @@ -11,9 +11,12 @@ #define BOOST_TEST_MODULE TestAccumulate #include +#include + #include #include #include +#include #include #include @@ -249,4 +252,48 @@ BOOST_AUTO_TEST_CASE(min_max) BOOST_CHECK_EQUAL(max_value, 10.f); } +template +void ensure_std_accumulate_equality(const std::vector &data, + boost::compute::command_queue &queue) +{ + boost::compute::mapped_view view(&data[0], data.size(), queue.get_context()); + + BOOST_CHECK_EQUAL( + std::accumulate(data.begin(), data.end(), 0), + boost::compute::accumulate(view.begin(), view.end(), 0, queue) + ); +} + +BOOST_AUTO_TEST_CASE(std_accumulate_equality) +{ + // test accumulate() with int + int data1[] = { 1, 2, 3, 4 }; + std::vector vec1(data1, data1 + 4); + ensure_std_accumulate_equality(vec1, queue); + + vec1.resize(10000); + std::fill(vec1.begin(), vec1.end(), 2); + ensure_std_accumulate_equality(vec1, queue); + + // test accumulate() with float + float data2[] = { 1.2f, 2.3f, 4.5f, 6.7f, 8.9f }; + std::vector vec2(data2, data2 + 5); + ensure_std_accumulate_equality(vec2, queue); + + vec2.resize(10000); + std::fill(vec2.begin(), vec2.end(), 1.01f); + ensure_std_accumulate_equality(vec2, queue); + + // test accumulate() with double + if(device.supports_extension("cl_khr_fp64")){ + double data3[] = { 1.2, 2.3, 4.5, 6.7, 8.9 }; + std::vector vec3(data3, data3 + 5); + ensure_std_accumulate_equality(vec3, queue); + + vec3.resize(10000); + std::fill(vec3.begin(), vec3.end(), 2.02); + ensure_std_accumulate_equality(vec3, queue); + } +} + BOOST_AUTO_TEST_SUITE_END()