1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #include "../include/type_traits.h" 30 #ifndef ANDROID_ASTL_TYPE_TRAITS_H__ 31 #error "Wrong header included!!" 32 #endif 33 34 #include "common.h" 35 36 namespace android { 37 38 using std::true_type; 39 using std::false_type; 40 41 bool testTrueFalseType() 42 { 43 EXPECT_TRUE(true_type::value == true); 44 EXPECT_TRUE(false_type::value == false); 45 EXPECT_TRUE(true_type::type::value == true); 46 EXPECT_TRUE(false_type::type::value == false); 47 48 typedef true_type::value_type true_value_type; 49 typedef true_type::type true_type; 50 typedef true_type::type::value_type true_type_value_type; 51 typedef true_type::type::type true_type_type; 52 53 typedef false_type::value_type false_value_type; 54 typedef false_type::type false_type; 55 typedef false_type::type::value_type false_type_value_type; 56 typedef false_type::type::type false_type_type; 57 return true; 58 } 59 60 bool testIsIntegral() 61 { 62 using std::is_integral; 63 EXPECT_TRUE(is_integral<bool>::value == true); 64 EXPECT_TRUE(is_integral<char>::value == true); 65 EXPECT_TRUE(is_integral<signed char>::value == true); 66 EXPECT_TRUE(is_integral<unsigned char>::value == true); 67 EXPECT_TRUE(is_integral<wchar_t>::value == true); 68 EXPECT_TRUE(is_integral<short>::value == true); 69 EXPECT_TRUE(is_integral<unsigned short>::value == true); 70 EXPECT_TRUE(is_integral<int>::value == true); 71 EXPECT_TRUE(is_integral<unsigned int>::value == true); 72 EXPECT_TRUE(is_integral<long>::value == true); 73 EXPECT_TRUE(is_integral<unsigned long>::value == true); 74 EXPECT_TRUE(is_integral<long long>::value == true); 75 EXPECT_TRUE(is_integral<unsigned long long>::value == true); 76 77 // const 78 EXPECT_TRUE(is_integral<int const>::value == true); 79 EXPECT_TRUE(is_integral<const int>::value == true); 80 81 // volatile 82 EXPECT_TRUE(is_integral<int volatile>::value == true); 83 EXPECT_TRUE(is_integral<int const volatile>::value == true); 84 85 // float is not 86 EXPECT_TRUE(is_integral<float>::value == false); 87 return true; 88 } 89 90 bool testIsFloatingPoint() 91 { 92 using std::is_floating_point; 93 EXPECT_TRUE(is_floating_point<float>::value == true); 94 EXPECT_TRUE(is_floating_point<double>::value == true); 95 EXPECT_TRUE(is_floating_point<long double>::value == true); 96 return true; 97 } 98 99 bool testIsPointer() 100 { 101 using std::is_pointer; 102 EXPECT_TRUE(is_pointer<float>::value == false); 103 EXPECT_TRUE(is_pointer<int *>::value == true); 104 return true; 105 } 106 107 class A {}; 108 109 bool testIsPodOrClass() 110 { 111 using std::is_class; 112 using std::is_pod; 113 EXPECT_TRUE(is_pod<float>::value == true); 114 EXPECT_TRUE(is_pod<int *>::value == true); 115 EXPECT_TRUE(is_pod<A>::value == false); 116 117 EXPECT_TRUE(is_class<float>::value == false); 118 EXPECT_TRUE(is_class<int *>::value == false); 119 EXPECT_TRUE(is_class<A>::value == true); 120 return true; 121 } 122 } // namespace android 123 124 int main(int argc, char **argv) 125 { 126 FAIL_UNLESS(testTrueFalseType); 127 FAIL_UNLESS(testIsIntegral); 128 FAIL_UNLESS(testIsFloatingPoint); 129 FAIL_UNLESS(testIsPointer); 130 FAIL_UNLESS(testIsPodOrClass); 131 return kPassed; 132 } 133