[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