[compute] 16/46: Test if min/max_element algorithms return the first min/max in given range

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Mon Dec 21 18:28:40 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch master
in repository compute.

commit e357a6a338c08da0ef2d25470120242b75acf351
Author: Jakub Szuppe <j.szuppe at gmail.com>
Date:   Tue Aug 18 21:26:34 2015 +0200

    Test if min/max_element algorithms return the first min/max in given range
---
 perf/perf_max_element.cpp | 28 ++++++++++++++++++++++------
 test/test_extrema.cpp     | 16 ++++++++++------
 2 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/perf/perf_max_element.cpp b/perf/perf_max_element.cpp
index 6635488..0e47c67 100644
--- a/perf/perf_max_element.cpp
+++ b/perf/perf_max_element.cpp
@@ -47,28 +47,44 @@ int main(int argc, char *argv[])
         queue
     );
 
-    boost::compute::vector<int>::iterator max = device_vector.begin();
+    boost::compute::vector<int>::iterator device_max_iter
+        = device_vector.begin();
+
     perf_timer t;
     for(size_t trial = 0; trial < PERF_TRIALS; trial++){
         t.start();
-        max = boost::compute::max_element(
+        device_max_iter = boost::compute::max_element(
             device_vector.begin(), device_vector.end(), queue
         );
         queue.finish();
         t.stop();
     }
 
-    int device_max = max.read(queue);
+    int device_max = device_max_iter.read(queue);
     std::cout << "time: " << t.min_time() / 1e6 << " ms" << std::endl;
     std::cout << "max: " << device_max << std::endl;
 
     // verify max is correct
-    int host_max = *std::max_element(host_vector.begin(), host_vector.end());
+    std::vector<int>::iterator host_max_iter
+        = std::max_element(host_vector.begin(), host_vector.end());
+
+    int host_max = *host_max_iter;
     if(device_max != host_max){
+         std::cout << "ERROR: "
+                   << "device_max (" << device_max << ") "
+                   << "!= "
+                   << "host_max (" << host_max << ")"
+                   << std::endl;
+         return -1;
+    }
+
+    size_t host_max_idx = std::distance(host_vector.begin(), host_max_iter);
+    size_t device_max_idx = std::distance(device_vector.begin(), device_max_iter);
+    if(device_max_idx != host_max_idx){
         std::cout << "ERROR: "
-                  << "device_max (" << device_max << ") "
+                  << "device_max index (" << device_max_idx << ") "
                   << "!= "
-                  << "host_max (" << host_max << ")"
+                  << "host_max index (" << host_max_idx << ")"
                   << std::endl;
         return -1;
     }
diff --git a/test/test_extrema.cpp b/test/test_extrema.cpp
index 98804bc..dd5fa47 100644
--- a/test/test_extrema.cpp
+++ b/test/test_extrema.cpp
@@ -15,6 +15,7 @@
 #include <boost/compute/command_queue.hpp>
 #include <boost/compute/algorithm/copy.hpp>
 #include <boost/compute/algorithm/iota.hpp>
+#include <boost/compute/algorithm/fill.hpp>
 #include <boost/compute/algorithm/max_element.hpp>
 #include <boost/compute/algorithm/min_element.hpp>
 #include <boost/compute/algorithm/minmax_element.hpp>
@@ -25,18 +26,21 @@
 
 BOOST_AUTO_TEST_CASE(int_min_max)
 {
-    int data[] = { 9, 15, 1, 4 };
-    boost::compute::vector<int> vector(data, data + 4, queue);
+    boost::compute::vector<int> vector(size_t(4096), int(0), queue);
+    boost::compute::iota(vector.begin(), (vector.begin() + 512), 1, queue);
+    boost::compute::fill((vector.end() - 512), vector.end(), 513, queue);
 
     boost::compute::vector<int>::iterator min_iter =
         boost::compute::min_element(vector.begin(), vector.end(), queue);
-    BOOST_CHECK(min_iter == vector.begin() + 2);
-    BOOST_CHECK_EQUAL(*min_iter, 1);
+    BOOST_CHECK(min_iter == vector.begin() + 512);
+    BOOST_CHECK_EQUAL((vector.begin() + 512).read(queue), 0);
+    BOOST_CHECK_EQUAL(min_iter.read(queue), 0);
 
     boost::compute::vector<int>::iterator max_iter =
         boost::compute::max_element(vector.begin(), vector.end(), queue);
-    BOOST_CHECK(max_iter == vector.begin() + 1);
-    BOOST_CHECK_EQUAL(*max_iter, 15);
+    BOOST_CHECK(max_iter == vector.end() - 512);
+    BOOST_CHECK_EQUAL((vector.end() - 512).read(queue), 513);
+    BOOST_CHECK_EQUAL(max_iter.read(queue), 513);
 }
 
 BOOST_AUTO_TEST_CASE(int2_min_max_custom_comparision_function)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/compute.git



More information about the debian-science-commits mailing list