rational.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "simple/support/rational.hpp"
  2. using simple::support::rational;
  3. using simple::support::meta_constant;
  4. constexpr bool Ratio()
  5. {
  6. static_assert(int(10 * rational{1,2}) == 5);
  7. static_assert(int(9 * rational{1,2}) == 4);
  8. static_assert(double(9 * rational{1.0,2.0}) == 4.5);
  9. static_assert(int(rational{1,3} * 9) == 3);
  10. static_assert(int(rational{1,3} * rational{5,2} * 12) == 10);
  11. static_assert(int(13 * rational{5,2} * rational{2,5}) == 13);
  12. bool assertion = true;
  13. auto ratio = rational{1,2};
  14. assertion &= int(ratio) == 0;
  15. ratio *= 2;
  16. assertion &= int(ratio) == 1;
  17. ratio *= 3;
  18. assertion &= int(ratio) == 3;
  19. ratio *= rational{1,2};
  20. assertion &= int(ratio) == 1;
  21. ratio *= 5;
  22. assertion &= int(ratio) == 7;
  23. ratio *= 2;
  24. assertion &= int(ratio) == 15;
  25. auto half = rational(1, meta_constant<int,2>{});
  26. auto one = half + half;
  27. auto quarter = half * half;
  28. auto onenhalf = half + 1;
  29. assertion &= int(one) == 1;
  30. assertion &= int(quarter * 16) == 4;
  31. assertion &= int(quarter * 8) == 2;
  32. assertion &= int(quarter * 15) == 3;
  33. assertion &= (quarter * 2) == (quarter + quarter);
  34. assertion &= (quarter * 2) == rational(2, meta_constant<int,4>{});
  35. assertion &= onenhalf == rational(3, meta_constant<int,2>{});
  36. static_assert(int(10 * rational{1,2.f}) == 5);
  37. return assertion;
  38. }
  39. int main()
  40. {
  41. static_assert(Ratio());
  42. return 0;
  43. }