OpenWalnut
1.4.0
|
00001 //--------------------------------------------------------------------------- 00002 // 00003 // Project: OpenWalnut ( http://www.openwalnut.org ) 00004 // 00005 // Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS 00006 // For more information see http://www.openwalnut.org/copying 00007 // 00008 // This file is part of OpenWalnut. 00009 // 00010 // OpenWalnut is free software: you can redistribute it and/or modify 00011 // it under the terms of the GNU Lesser General Public License as published by 00012 // the Free Software Foundation, either version 3 of the License, or 00013 // (at your option) any later version. 00014 // 00015 // OpenWalnut is distributed in the hope that it will be useful, 00016 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 // GNU Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public License 00021 // along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>. 00022 // 00023 //--------------------------------------------------------------------------- 00024 00025 #ifndef WCOMPILETIMEFUNCTIONS_TEST_H 00026 #define WCOMPILETIMEFUNCTIONS_TEST_H 00027 00028 #include <string> 00029 #include <vector> 00030 00031 #include <cxxtest/TestSuite.h> 00032 #include "../WCompileTimeFunctions.h" 00033 00034 /** 00035 * Test class for WBinom and WPower template. 00036 */ 00037 class WCompileTimeFunctionsTest : public CxxTest::TestSuite 00038 { 00039 public: 00040 /** 00041 * Test WBinom. 00042 */ 00043 void testWBinom() 00044 { 00045 std::size_t value; 00046 value = WBinom< 1, 0 >::value; 00047 TS_ASSERT_EQUALS( value, 1 ); 00048 value = WBinom< 1, 1 >::value; 00049 TS_ASSERT_EQUALS( value, 1 ); 00050 value = WBinom< 2, 0 >::value; 00051 TS_ASSERT_EQUALS( value, 1 ); 00052 value = WBinom< 2, 1 >::value; 00053 TS_ASSERT_EQUALS( value, 2 ); 00054 value = WBinom< 2, 2 >::value; 00055 TS_ASSERT_EQUALS( value, 1 ); 00056 value = WBinom< 3, 0 >::value; 00057 TS_ASSERT_EQUALS( value, 1 ); 00058 value = WBinom< 3, 1 >::value; 00059 TS_ASSERT_EQUALS( value, 3 ); 00060 value = WBinom< 3, 2 >::value; 00061 TS_ASSERT_EQUALS( value, 3 ); 00062 value = WBinom< 3, 3 >::value; 00063 TS_ASSERT_EQUALS( value, 1 ); 00064 value = WBinom< 4, 0 >::value; 00065 TS_ASSERT_EQUALS( value, 1 ); 00066 value = WBinom< 4, 1 >::value; 00067 TS_ASSERT_EQUALS( value, 4 ); 00068 value = WBinom< 4, 2 >::value; 00069 TS_ASSERT_EQUALS( value, 6 ); 00070 value = WBinom< 4, 3 >::value; 00071 TS_ASSERT_EQUALS( value, 4 ); 00072 value = WBinom< 4, 4 >::value; 00073 TS_ASSERT_EQUALS( value, 1 ); 00074 value = WBinom< 5, 0 >::value; 00075 TS_ASSERT_EQUALS( value, 1 ); 00076 value = WBinom< 5, 1 >::value; 00077 TS_ASSERT_EQUALS( value, 5 ); 00078 value = WBinom< 5, 2 >::value; 00079 TS_ASSERT_EQUALS( value, 10 ); 00080 value = WBinom< 5, 3 >::value; 00081 TS_ASSERT_EQUALS( value, 10 ); 00082 value = WBinom< 5, 4 >::value; 00083 TS_ASSERT_EQUALS( value, 5 ); 00084 value = WBinom< 5, 5 >::value; 00085 TS_ASSERT_EQUALS( value, 1 ); 00086 value = WBinom< 6, 0 >::value; 00087 TS_ASSERT_EQUALS( value, 1 ); 00088 value = WBinom< 6, 1 >::value; 00089 TS_ASSERT_EQUALS( value, 6 ); 00090 value = WBinom< 6, 2 >::value; 00091 TS_ASSERT_EQUALS( value, 15 ); 00092 value = WBinom< 6, 3 >::value; 00093 TS_ASSERT_EQUALS( value, 20 ); 00094 value = WBinom< 6, 4 >::value; 00095 TS_ASSERT_EQUALS( value, 15 ); 00096 value = WBinom< 6, 5 >::value; 00097 TS_ASSERT_EQUALS( value, 6 ); 00098 value = WBinom< 6, 6 >::value; 00099 TS_ASSERT_EQUALS( value, 1 ); 00100 } 00101 00102 /** 00103 * Test WPower. 00104 */ 00105 void testWPower() 00106 { 00107 std::size_t value; 00108 value = WPower< 1, 0 >::value; 00109 TS_ASSERT_EQUALS( value, 1 ); 00110 value = WPower< 2, 0 >::value; 00111 TS_ASSERT_EQUALS( value, 1 ); 00112 value = WPower< 3, 0 >::value; 00113 TS_ASSERT_EQUALS( value, 1 ); 00114 value = WPower< 4, 0 >::value; 00115 TS_ASSERT_EQUALS( value, 1 ); 00116 value = WPower< 5, 0 >::value; 00117 TS_ASSERT_EQUALS( value, 1 ); 00118 value = WPower< 6, 0 >::value; 00119 TS_ASSERT_EQUALS( value, 1 ); 00120 value = WPower< 1, 1 >::value; 00121 TS_ASSERT_EQUALS( value, 1 ); 00122 value = WPower< 2, 1 >::value; 00123 TS_ASSERT_EQUALS( value, 2 ); 00124 value = WPower< 3, 1 >::value; 00125 TS_ASSERT_EQUALS( value, 3 ); 00126 value = WPower< 4, 1 >::value; 00127 TS_ASSERT_EQUALS( value, 4 ); 00128 value = WPower< 5, 1 >::value; 00129 TS_ASSERT_EQUALS( value, 5 ); 00130 value = WPower< 0, 2 >::value; 00131 TS_ASSERT_EQUALS( value, 0 ); 00132 value = WPower< 1, 2 >::value; 00133 TS_ASSERT_EQUALS( value, 1 ); 00134 value = WPower< 2, 2 >::value; 00135 TS_ASSERT_EQUALS( value, 4 ); 00136 value = WPower< 3, 2 >::value; 00137 TS_ASSERT_EQUALS( value, 9 ); 00138 value = WPower< 4, 2 >::value; 00139 TS_ASSERT_EQUALS( value, 16 ); 00140 value = WPower< 5, 2 >::value; 00141 TS_ASSERT_EQUALS( value, 25 ); 00142 value = WPower< 6, 2 >::value; 00143 TS_ASSERT_EQUALS( value, 36 ); 00144 value = WPower< 3, 3 >::value; 00145 TS_ASSERT_EQUALS( value, 27 ); 00146 value = WPower< 4, 3 >::value; 00147 TS_ASSERT_EQUALS( value, 64 ); 00148 value = WPower< 5, 3 >::value; 00149 TS_ASSERT_EQUALS( value, 125 ); 00150 value = WPower< 2, 4 >::value; 00151 TS_ASSERT_EQUALS( value, 16 ); 00152 value = WPower< 3, 4 >::value; 00153 TS_ASSERT_EQUALS( value, 81 ); 00154 value = WPower< 2, 5 >::value; 00155 TS_ASSERT_EQUALS( value, 32 ); 00156 value = WPower< 3, 5 >::value; 00157 TS_ASSERT_EQUALS( value, 243 ); 00158 } 00159 }; 00160 00161 #endif // WCOMPILETIMEFUNCTIONS_TEST_H