1 //Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
2 
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 
6 #include <boost/qvm/vec_operations.hpp>
7 #include "test_qvm_vector.hpp"
8 #include "gold.hpp"
9 
10 namespace
11     {
12     template <class T,class U> struct same_type_tester;
13     template <class T> struct same_type_tester<T,T> { };
test_same_type(T,U)14     template <class T,class U> void test_same_type( T, U ) { same_type_tester<T,U>(); }
15 
16     template <int Dim>
17     void
test()18     test()
19         {
20         using namespace boost::qvm::sfinae;
21 
22         test_qvm::vector<V1,Dim> const x(42,1);
23             {
24             test_qvm::vector<V1,Dim> const y(43,1);
25             test_same_type(float(),dot(x,y));
26             float d1=dot(x,y);
27             float d2=test_qvm::dot<float>(x.a,y.a);
28             BOOST_QVM_TEST_CLOSE(d1,d2,0.000001f);
29             }
30             {
31             test_qvm::vector<V1,Dim,double> const y(43,1);
32             test_same_type(double(),dot(x,y));
33             double d1=dot(x,y);
34             double d2=test_qvm::dot<double>(x.a,y.a);
35             BOOST_QVM_TEST_CLOSE(d1,d2,0.000001);
36             }
37         }
38     }
39 
40 int
main()41 main()
42     {
43     test<2>();
44     test<3>();
45     test<4>();
46     test<5>();
47     return boost::report_errors();
48     }
49