OpenWalnut  1.5.0dev
WCompileTimeFunctions_test.h
1 //---------------------------------------------------------------------------
2 //
3 // Project: OpenWalnut ( http://www.openwalnut.org )
4 //
5 // Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
6 // For more information see http://www.openwalnut.org/copying
7 //
8 // This file is part of OpenWalnut.
9 //
10 // OpenWalnut is free software: you can redistribute it and/or modify
11 // it under the terms of the GNU Lesser General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // OpenWalnut is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public License
21 // along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
22 //
23 //---------------------------------------------------------------------------
24 
25 #ifndef WCOMPILETIMEFUNCTIONS_TEST_H
26 #define WCOMPILETIMEFUNCTIONS_TEST_H
27 
28 #include <string>
29 #include <vector>
30 
31 #include <cxxtest/TestSuite.h>
32 #include "../WCompileTimeFunctions.h"
33 
34 /**
35  * Test class for WBinom and WPower template.
36  */
37 class WCompileTimeFunctionsTest : public CxxTest::TestSuite
38 {
39 public:
40  /**
41  * Test WBinom.
42  */
43  void testWBinom()
44  {
45  std::size_t value;
46  value = WBinom< 1, 0 >::value;
47  TS_ASSERT_EQUALS( value, 1 );
48  value = WBinom< 1, 1 >::value;
49  TS_ASSERT_EQUALS( value, 1 );
50  value = WBinom< 2, 0 >::value;
51  TS_ASSERT_EQUALS( value, 1 );
52  value = WBinom< 2, 1 >::value;
53  TS_ASSERT_EQUALS( value, 2 );
54  value = WBinom< 2, 2 >::value;
55  TS_ASSERT_EQUALS( value, 1 );
56  value = WBinom< 3, 0 >::value;
57  TS_ASSERT_EQUALS( value, 1 );
58  value = WBinom< 3, 1 >::value;
59  TS_ASSERT_EQUALS( value, 3 );
60  value = WBinom< 3, 2 >::value;
61  TS_ASSERT_EQUALS( value, 3 );
62  value = WBinom< 3, 3 >::value;
63  TS_ASSERT_EQUALS( value, 1 );
64  value = WBinom< 4, 0 >::value;
65  TS_ASSERT_EQUALS( value, 1 );
66  value = WBinom< 4, 1 >::value;
67  TS_ASSERT_EQUALS( value, 4 );
68  value = WBinom< 4, 2 >::value;
69  TS_ASSERT_EQUALS( value, 6 );
70  value = WBinom< 4, 3 >::value;
71  TS_ASSERT_EQUALS( value, 4 );
72  value = WBinom< 4, 4 >::value;
73  TS_ASSERT_EQUALS( value, 1 );
74  value = WBinom< 5, 0 >::value;
75  TS_ASSERT_EQUALS( value, 1 );
76  value = WBinom< 5, 1 >::value;
77  TS_ASSERT_EQUALS( value, 5 );
78  value = WBinom< 5, 2 >::value;
79  TS_ASSERT_EQUALS( value, 10 );
80  value = WBinom< 5, 3 >::value;
81  TS_ASSERT_EQUALS( value, 10 );
82  value = WBinom< 5, 4 >::value;
83  TS_ASSERT_EQUALS( value, 5 );
84  value = WBinom< 5, 5 >::value;
85  TS_ASSERT_EQUALS( value, 1 );
86  value = WBinom< 6, 0 >::value;
87  TS_ASSERT_EQUALS( value, 1 );
88  value = WBinom< 6, 1 >::value;
89  TS_ASSERT_EQUALS( value, 6 );
90  value = WBinom< 6, 2 >::value;
91  TS_ASSERT_EQUALS( value, 15 );
92  value = WBinom< 6, 3 >::value;
93  TS_ASSERT_EQUALS( value, 20 );
94  value = WBinom< 6, 4 >::value;
95  TS_ASSERT_EQUALS( value, 15 );
96  value = WBinom< 6, 5 >::value;
97  TS_ASSERT_EQUALS( value, 6 );
98  value = WBinom< 6, 6 >::value;
99  TS_ASSERT_EQUALS( value, 1 );
100  }
101 
102  /**
103  * Test WPower.
104  */
105  void testWPower()
106  {
107  std::size_t value;
108  value = WPower< 1, 0 >::value;
109  TS_ASSERT_EQUALS( value, 1 );
110  value = WPower< 2, 0 >::value;
111  TS_ASSERT_EQUALS( value, 1 );
112  value = WPower< 3, 0 >::value;
113  TS_ASSERT_EQUALS( value, 1 );
114  value = WPower< 4, 0 >::value;
115  TS_ASSERT_EQUALS( value, 1 );
116  value = WPower< 5, 0 >::value;
117  TS_ASSERT_EQUALS( value, 1 );
118  value = WPower< 6, 0 >::value;
119  TS_ASSERT_EQUALS( value, 1 );
120  value = WPower< 1, 1 >::value;
121  TS_ASSERT_EQUALS( value, 1 );
122  value = WPower< 2, 1 >::value;
123  TS_ASSERT_EQUALS( value, 2 );
124  value = WPower< 3, 1 >::value;
125  TS_ASSERT_EQUALS( value, 3 );
126  value = WPower< 4, 1 >::value;
127  TS_ASSERT_EQUALS( value, 4 );
128  value = WPower< 5, 1 >::value;
129  TS_ASSERT_EQUALS( value, 5 );
130  value = WPower< 0, 2 >::value;
131  TS_ASSERT_EQUALS( value, 0 );
132  value = WPower< 1, 2 >::value;
133  TS_ASSERT_EQUALS( value, 1 );
134  value = WPower< 2, 2 >::value;
135  TS_ASSERT_EQUALS( value, 4 );
136  value = WPower< 3, 2 >::value;
137  TS_ASSERT_EQUALS( value, 9 );
138  value = WPower< 4, 2 >::value;
139  TS_ASSERT_EQUALS( value, 16 );
140  value = WPower< 5, 2 >::value;
141  TS_ASSERT_EQUALS( value, 25 );
142  value = WPower< 6, 2 >::value;
143  TS_ASSERT_EQUALS( value, 36 );
144  value = WPower< 3, 3 >::value;
145  TS_ASSERT_EQUALS( value, 27 );
146  value = WPower< 4, 3 >::value;
147  TS_ASSERT_EQUALS( value, 64 );
148  value = WPower< 5, 3 >::value;
149  TS_ASSERT_EQUALS( value, 125 );
150  value = WPower< 2, 4 >::value;
151  TS_ASSERT_EQUALS( value, 16 );
152  value = WPower< 3, 4 >::value;
153  TS_ASSERT_EQUALS( value, 81 );
154  value = WPower< 2, 5 >::value;
155  TS_ASSERT_EQUALS( value, 32 );
156  value = WPower< 3, 5 >::value;
157  TS_ASSERT_EQUALS( value, 243 );
158  }
159 };
160 
161 #endif // WCOMPILETIMEFUNCTIONS_TEST_H
Test class for WBinom and WPower template.
Implements compile-time calculation of binomial coefficients.
Compute the nth power of a value.