• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
3 //
4 // Distributed under the Boost Software License, Version 1.0
5 // See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt
7 //
8 // See http://boostorg.github.com/compute for more information.
9 //---------------------------------------------------------------------------//
10 
11 #define BOOST_TEST_MODULE TestTypes
12 #include <boost/test/unit_test.hpp>
13 
14 #include <string>
15 #include <sstream>
16 
17 #include <boost/compute/types/fundamental.hpp>
18 
BOOST_AUTO_TEST_CASE(vector_ctor)19 BOOST_AUTO_TEST_CASE(vector_ctor)
20 {
21     boost::compute::int4_ i4(1, 2, 3, 4);
22     BOOST_CHECK(i4 == boost::compute::int4_(1, 2, 3, 4));
23     BOOST_CHECK_EQUAL(i4, boost::compute::int4_(1, 2, 3, 4));
24     BOOST_CHECK_EQUAL(i4[0], 1);
25     BOOST_CHECK_EQUAL(i4[1], 2);
26     BOOST_CHECK_EQUAL(i4[2], 3);
27     BOOST_CHECK_EQUAL(i4[3], 4);
28 
29     i4 = boost::compute::int4_(1);
30     BOOST_CHECK(i4 == boost::compute::int4_(1, 1, 1, 1));
31     BOOST_CHECK(i4 == (boost::compute::vector_type<int, size_t(4)>(1)));
32     BOOST_CHECK_EQUAL(i4, boost::compute::int4_(1, 1, 1, 1));
33     BOOST_CHECK_EQUAL(i4[0], 1);
34     BOOST_CHECK_EQUAL(i4[1], 1);
35     BOOST_CHECK_EQUAL(i4[2], 1);
36     BOOST_CHECK_EQUAL(i4[3], 1);
37 }
38 
BOOST_AUTO_TEST_CASE(vector_string)39 BOOST_AUTO_TEST_CASE(vector_string)
40 {
41     std::stringstream stream;
42     stream << boost::compute::int2_(1, 2);
43     BOOST_CHECK_EQUAL(stream.str(), std::string("int2(1, 2)"));
44 }
45 
BOOST_AUTO_TEST_CASE(vector_accessors_basic)46 BOOST_AUTO_TEST_CASE(vector_accessors_basic)
47 {
48     boost::compute::float4_ v;
49     v.x = 1;
50     v.y = 2;
51     v.z = 3;
52     v.w = 4;
53     BOOST_CHECK(v == boost::compute::float4_(1, 2, 3, 4));
54 }
55 
BOOST_AUTO_TEST_CASE(vector_accessors_all)56 BOOST_AUTO_TEST_CASE(vector_accessors_all)
57 {
58     boost::compute::int2_ i2(1, 2);
59     BOOST_CHECK_EQUAL(i2.x, 1);
60     BOOST_CHECK_EQUAL(i2.y, 2);
61 
62     boost::compute::int4_ i4(1, 2, 3, 4);
63     BOOST_CHECK_EQUAL(i4.x, 1);
64     BOOST_CHECK_EQUAL(i4.y, 2);
65     BOOST_CHECK_EQUAL(i4.z, 3);
66     BOOST_CHECK_EQUAL(i4.w, 4);
67 
68     boost::compute::int8_ i8(1, 2, 3, 4, 5, 6, 7, 8);
69     BOOST_CHECK_EQUAL(i8.s0, 1);
70     BOOST_CHECK_EQUAL(i8.s1, 2);
71     BOOST_CHECK_EQUAL(i8.s2, 3);
72     BOOST_CHECK_EQUAL(i8.s3, 4);
73     BOOST_CHECK_EQUAL(i8.s4, 5);
74     BOOST_CHECK_EQUAL(i8.s5, 6);
75     BOOST_CHECK_EQUAL(i8.s6, 7);
76     BOOST_CHECK_EQUAL(i8.s7, 8);
77 
78     boost::compute::int16_ i16(
79         1, 2, 3, 4, 5, 6, 7, 8,
80         9, 10, 11, 12, 13, 14, 15, 16);
81     BOOST_CHECK_EQUAL(i16.s0, 1);
82     BOOST_CHECK_EQUAL(i16.s1, 2);
83     BOOST_CHECK_EQUAL(i16.s2, 3);
84     BOOST_CHECK_EQUAL(i16.s3, 4);
85     BOOST_CHECK_EQUAL(i16.s4, 5);
86     BOOST_CHECK_EQUAL(i16.s5, 6);
87     BOOST_CHECK_EQUAL(i16.s6, 7);
88     BOOST_CHECK_EQUAL(i16.s7, 8);
89     BOOST_CHECK_EQUAL(i16.s8, 9);
90     BOOST_CHECK_EQUAL(i16.s9, 10);
91     BOOST_CHECK_EQUAL(i16.sa, 11);
92     BOOST_CHECK_EQUAL(i16.sb, 12);
93     BOOST_CHECK_EQUAL(i16.sc, 13);
94     BOOST_CHECK_EQUAL(i16.sd, 14);
95     BOOST_CHECK_EQUAL(i16.se, 15);
96     BOOST_CHECK_EQUAL(i16.sf, 16);
97 }
98