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