176dd1d91692bc8ca2a0f8e74a663ca2f191e2104Nick Lewycky// This file is part of Eigen, a lightweight C++ template library
2e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis// for linear algebra.
3e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis//
4e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
5e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis//
6e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis// This Source Code Form is subject to the terms of the Mozilla
7e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis// Public License v. 2.0. If a copy of the MPL was not distributed
8e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis
10e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis#include "main.h"
11e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis
12e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidisvoid test_meta()
13e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis{
14e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY((internal::conditional<(3<4),internal::true_type, internal::false_type>::type::value));
15f59edb96b2d0bfe612b732f19519ab84bb995bd4Chandler Carruth  VERIFY(( internal::is_same<float,float>::value));
16e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY((!internal::is_same<float,double>::value));
17e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY((!internal::is_same<float,float&>::value));
18e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY((!internal::is_same<float,const float&>::value));
19e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis
20e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_all<const float&>::type >::value));
21e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_all<const float*>::type >::value));
22e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_all<const float*&>::type >::value));
23e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_all<float**>::type >::value));
24e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_all<float**&>::type >::value));
25e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_all<float* const *&>::type >::value));
26e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_all<float* const>::type >::value));
27e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis
28e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  // test add_const
29e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::add_const<float>::type, const float >::value));
30e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::add_const<float*>::type, float* const>::value));
31e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::add_const<float const*>::type, float const* const>::value));
32e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::add_const<float&>::type, float& >::value));
33011d8b93b7cfa8492b8a9c909a850d6577e08dcaDouglas Gregor
34d579dd5cc43e657647f38be5dd47c8974cd43108Argyrios Kyrtzidis  // test remove_const
35e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::remove_const<float const* const>::type, float const* >::value));
36ff74f9683943c0db9cb075423596b00ea3b38c5dDmitri Gribenko  VERIFY(( internal::is_same< internal::remove_const<float const*>::type, float const* >::value));
37e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::remove_const<float* const>::type, float* >::value));
38e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis
39ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // test add_const_on_value_type
40ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  VERIFY(( internal::is_same< internal::add_const_on_value_type<float&>::type, float const& >::value));
41e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::add_const_on_value_type<float*>::type, float const* >::value));
42e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis
43e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::add_const_on_value_type<float>::type, const float >::value));
44e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::add_const_on_value_type<const float>::type, const float >::value));
45e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis
46e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::add_const_on_value_type<const float* const>::type, const float* const>::value));
47e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same< internal::add_const_on_value_type<float* const>::type, const float* const>::value));
48e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis
49e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_reference<float&>::type >::value));
50e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<const float,internal::remove_reference<const float&>::type >::value));
51e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_pointer<float*>::type >::value));
52e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<const float,internal::remove_pointer<const float*>::type >::value));
53e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(( internal::is_same<float,internal::remove_pointer<float* const >::type >::value));
54e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis
55e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY(internal::meta_sqrt<1>::ret == 1);
56e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  #define VERIFY_META_SQRT(X) VERIFY(internal::meta_sqrt<X>::ret == int(std::sqrt(double(X))))
57d579dd5cc43e657647f38be5dd47c8974cd43108Argyrios Kyrtzidis  VERIFY_META_SQRT(2);
58d579dd5cc43e657647f38be5dd47c8974cd43108Argyrios Kyrtzidis  VERIFY_META_SQRT(3);
59d579dd5cc43e657647f38be5dd47c8974cd43108Argyrios Kyrtzidis  VERIFY_META_SQRT(4);
60d579dd5cc43e657647f38be5dd47c8974cd43108Argyrios Kyrtzidis  VERIFY_META_SQRT(5);
61d579dd5cc43e657647f38be5dd47c8974cd43108Argyrios Kyrtzidis  VERIFY_META_SQRT(6);
62d579dd5cc43e657647f38be5dd47c8974cd43108Argyrios Kyrtzidis  VERIFY_META_SQRT(8);
63d579dd5cc43e657647f38be5dd47c8974cd43108Argyrios Kyrtzidis  VERIFY_META_SQRT(9);
64e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY_META_SQRT(15);
65e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY_META_SQRT(16);
66e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY_META_SQRT(17);
67e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY_META_SQRT(255);
68e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY_META_SQRT(256);
69e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY_META_SQRT(257);
70e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY_META_SQRT(1023);
71e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY_META_SQRT(1024);
72e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis  VERIFY_META_SQRT(1025);
73e22339c44bb28d71a2cc97c840d3da0c4bdb4909Dmitri Gribenko}
74e397bf1bd90cfceb0166606ebcd2580b7671a828Argyrios Kyrtzidis