OpenWalnut  1.4.0
WCompileTimeFunctions_test.h
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