25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

243 satır
6.1 KiB

  1. //
  2. // Lol Engine — Unit tests
  3. //
  4. // Copyright © 2010—2015 Sam Hocevar <sam@hocevar.net>
  5. //
  6. // This program is free software. It comes without any warranty, to
  7. // the extent permitted by applicable law. You can redistribute it
  8. // and/or modify it under the terms of the Do What the Fuck You Want
  9. // to Public License, Version 2, as published by the WTFPL Task Force.
  10. // See http://www.wtfpl.net/ for more details.
  11. //
  12. #include <lol/engine-internal.h>
  13. #include <cmath>
  14. #include <lolunit.h>
  15. namespace lol
  16. {
  17. lolunit_declare_fixture(bigint_test)
  18. {
  19. lolunit_declare_test(declaration)
  20. {
  21. bigint<> a;
  22. bigint<0> b;
  23. bigint<32> c;
  24. }
  25. lolunit_declare_test(int32_cast)
  26. {
  27. bigint<> a(0), b(1), c(-1);
  28. lolunit_assert_equal((int32_t)a, 0);
  29. lolunit_assert_equal((int32_t)b, 1);
  30. lolunit_assert_equal((int32_t)c, -1);
  31. }
  32. lolunit_declare_test(uint32_cast)
  33. {
  34. bigint<> a(0), b(1), c(~(uint32_t)0);
  35. lolunit_assert_equal((uint32_t)a, 0);
  36. lolunit_assert_equal((uint32_t)b, 1);
  37. lolunit_assert_equal((uint32_t)c, ~(uint32_t)0);
  38. }
  39. lolunit_declare_test(operator_equal)
  40. {
  41. bigint<> a(-1), b(0), c(1);
  42. lolunit_assert(a == a);
  43. lolunit_assert(!(a == b));
  44. lolunit_assert(!(a == c));
  45. lolunit_assert(!(b == a));
  46. lolunit_assert(b == b);
  47. lolunit_assert(!(b == c));
  48. lolunit_assert(!(c == a));
  49. lolunit_assert(!(c == b));
  50. lolunit_assert(c == c);
  51. }
  52. lolunit_declare_test(operator_notequal)
  53. {
  54. bigint<> a(-1), b(0), c(1);
  55. lolunit_assert(!(a != a));
  56. lolunit_assert(a != b);
  57. lolunit_assert(a != c);
  58. lolunit_assert(b != a);
  59. lolunit_assert(!(b != b));
  60. lolunit_assert(b != c);
  61. lolunit_assert(c != a);
  62. lolunit_assert(c != b);
  63. lolunit_assert(!(c != c));
  64. }
  65. lolunit_declare_test(operator_smaller)
  66. {
  67. bigint<> a(-10), b(-1), c(0), d(1), e(10);
  68. lolunit_assert(!(a < a));
  69. lolunit_assert(a < b);
  70. lolunit_assert(a < c);
  71. lolunit_assert(a < d);
  72. lolunit_assert(a < e);
  73. lolunit_assert(!(b < a));
  74. lolunit_assert(!(b < b));
  75. lolunit_assert(b < c);
  76. lolunit_assert(b < d);
  77. lolunit_assert(b < e);
  78. lolunit_assert(!(c < a));
  79. lolunit_assert(!(c < b));
  80. lolunit_assert(!(c < c));
  81. lolunit_assert(c < d);
  82. lolunit_assert(c < e);
  83. lolunit_assert(!(d < a));
  84. lolunit_assert(!(d < b));
  85. lolunit_assert(!(d < c));
  86. lolunit_assert(!(d < d));
  87. lolunit_assert(d < e);
  88. lolunit_assert(!(e < a));
  89. lolunit_assert(!(e < b));
  90. lolunit_assert(!(e < c));
  91. lolunit_assert(!(e < d));
  92. lolunit_assert(!(e < e));
  93. }
  94. lolunit_declare_test(operator_smaller_or_equal)
  95. {
  96. bigint<> a(-10), b(-1), c(0), d(1), e(10);
  97. lolunit_assert(a <= a);
  98. lolunit_assert(a <= b);
  99. lolunit_assert(a <= c);
  100. lolunit_assert(a <= d);
  101. lolunit_assert(a <= e);
  102. lolunit_assert(!(b <= a));
  103. lolunit_assert(b <= b);
  104. lolunit_assert(b <= c);
  105. lolunit_assert(b <= d);
  106. lolunit_assert(b <= e);
  107. lolunit_assert(!(c <= a));
  108. lolunit_assert(!(c <= b));
  109. lolunit_assert(c <= c);
  110. lolunit_assert(c <= d);
  111. lolunit_assert(c <= e);
  112. lolunit_assert(!(d <= a));
  113. lolunit_assert(!(d <= b));
  114. lolunit_assert(!(d <= c));
  115. lolunit_assert(d <= d);
  116. lolunit_assert(d <= e);
  117. lolunit_assert(!(e <= a));
  118. lolunit_assert(!(e <= b));
  119. lolunit_assert(!(e <= c));
  120. lolunit_assert(!(e <= d));
  121. lolunit_assert(e <= e);
  122. }
  123. lolunit_declare_test(operator_greater)
  124. {
  125. bigint<> a(-10), b(-1), c(0), d(1), e(10);
  126. lolunit_assert(!(a > a));
  127. lolunit_assert(!(a > b));
  128. lolunit_assert(!(a > c));
  129. lolunit_assert(!(a > d));
  130. lolunit_assert(!(a > e));
  131. lolunit_assert(b > a);
  132. lolunit_assert(!(b > b));
  133. lolunit_assert(!(b > c));
  134. lolunit_assert(!(b > d));
  135. lolunit_assert(!(b > e));
  136. lolunit_assert(c > a);
  137. lolunit_assert(c > b);
  138. lolunit_assert(!(c > c));
  139. lolunit_assert(!(c > d));
  140. lolunit_assert(!(c > e));
  141. lolunit_assert(d > a);
  142. lolunit_assert(d > b);
  143. lolunit_assert(d > c);
  144. lolunit_assert(!(d > d));
  145. lolunit_assert(!(d > e));
  146. lolunit_assert(e > a);
  147. lolunit_assert(e > b);
  148. lolunit_assert(e > c);
  149. lolunit_assert(e > d);
  150. lolunit_assert(!(e > e));
  151. }
  152. lolunit_declare_test(operator_greater_or_equal)
  153. {
  154. bigint<> a(-10), b(-1), c(0), d(1), e(10);
  155. lolunit_assert(a >= a);
  156. lolunit_assert(!(a >= b));
  157. lolunit_assert(!(a >= c));
  158. lolunit_assert(!(a >= d));
  159. lolunit_assert(!(a >= e));
  160. lolunit_assert(b >= a);
  161. lolunit_assert(b >= b);
  162. lolunit_assert(!(b >= c));
  163. lolunit_assert(!(b >= d));
  164. lolunit_assert(!(b >= e));
  165. lolunit_assert(c >= a);
  166. lolunit_assert(c >= b);
  167. lolunit_assert(c >= c);
  168. lolunit_assert(!(c >= d));
  169. lolunit_assert(!(c >= e));
  170. lolunit_assert(d >= a);
  171. lolunit_assert(d >= b);
  172. lolunit_assert(d >= c);
  173. lolunit_assert(d >= d);
  174. lolunit_assert(!(d >= e));
  175. lolunit_assert(e >= a);
  176. lolunit_assert(e >= b);
  177. lolunit_assert(e >= c);
  178. lolunit_assert(e >= d);
  179. lolunit_assert(e >= e);
  180. }
  181. lolunit_declare_test(multiply)
  182. {
  183. bigint<> a(-10), b(0), c(10);
  184. lolunit_assert_equal((int32_t)(a * a), 100);
  185. lolunit_assert_equal((int32_t)(a * b), 0);
  186. lolunit_assert_equal((int32_t)(a * c), -100);
  187. lolunit_assert_equal((int32_t)(b * a), 0);
  188. lolunit_assert_equal((int32_t)(b * b), 0);
  189. lolunit_assert_equal((int32_t)(b * c), 0);
  190. lolunit_assert_equal((int32_t)(c * a), -100);
  191. lolunit_assert_equal((int32_t)(c * b), 0);
  192. lolunit_assert_equal((int32_t)(c * c), 100);
  193. }
  194. };
  195. } /* namespace lol */