test_fixpt.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "test.h"
  2. #include "fixpt.h"
  3. #include "util.c"
  4. #include "fixpt.c"
  5. static void check_common(void)
  6. {
  7. /* Check conversion functions */
  8. CHECK(float_to_fixpt(1.0f) == int_to_fixpt(1));
  9. CHECK(float_to_fixpt(5.0f) == int_to_fixpt(5));
  10. CHECK(float_to_fixpt(10.0f) == int_to_fixpt(10));
  11. CHECK(float_to_fixpt(1023.0f) == int_to_fixpt(1023));
  12. CHECK(float_to_fixpt(-1.0f) == int_to_fixpt(-1));
  13. CHECK(float_to_fixpt(-99.0f) == int_to_fixpt(-99));
  14. CHECK(float_to_fixpt(-1023.0f) == int_to_fixpt(-1023));
  15. CHECK(fixpt_to_int(int_to_fixpt(6)) == 6);
  16. CHECK(fixpt_to_float(float_to_fixpt(6.0f)) == 6.0f);
  17. CHECK(fixpt_to_float(float_to_fixpt(6.5f)) == 6.5f);
  18. CHECK(fixpt_to_float(float_to_fixpt(6.5f)) != 6.0f);
  19. CHECK(fixpt_to_float(float_to_fixpt(-6.0f)) == -6.0f);
  20. /* Check rounding of conversion functions */
  21. CHECK(fixpt_to_int(float_to_fixpt(5.4f)) == 5);
  22. CHECK(fixpt_to_int(float_to_fixpt(5.5f)) == 6);
  23. CHECK(fixpt_to_int(float_to_fixpt(5.6f)) == 6);
  24. CHECK(fixpt_to_int(float_to_fixpt(-5.4f)) == -5);
  25. CHECK(fixpt_to_int(float_to_fixpt(-5.5f)) == -6);
  26. CHECK(fixpt_to_int(float_to_fixpt(-5.6f)) == -6);
  27. CHECK(fixpt_to_int(float_to_fixpt(0.4f)) == 0);
  28. CHECK(fixpt_to_int(float_to_fixpt(0.5f)) == 1);
  29. CHECK(fixpt_to_int(float_to_fixpt(0.6f)) == 1);
  30. CHECK(fixpt_to_int(float_to_fixpt(-0.4f)) == 0);
  31. CHECK(fixpt_to_int(float_to_fixpt(-0.5f)) == -1);
  32. CHECK(fixpt_to_int(float_to_fixpt(-0.6f)) == -1);
  33. /* Check decimal functions */
  34. CHECK(fixpt_get_int_part(float_to_fixpt(0.0f)) == 0);
  35. CHECK(fixpt_get_int_part(float_to_fixpt(1.0f)) == 1);
  36. CHECK(fixpt_get_int_part(float_to_fixpt(1.5f)) == 1);
  37. CHECK(fixpt_get_int_part(float_to_fixpt(2.5f)) == 2);
  38. CHECK(fixpt_get_int_part(float_to_fixpt(-1.0f)) == -1);
  39. CHECK(fixpt_get_int_part(float_to_fixpt(-1.5f)) == -1);
  40. CHECK(fixpt_get_int_part(float_to_fixpt(-2.5f)) == -2);
  41. CHECK(fixpt_get_dec_fract(float_to_fixpt(1.25f), 2) == 25);
  42. CHECK(fixpt_get_dec_fract(float_to_fixpt(-1.25f), 2) == 25);
  43. CHECK(fixpt_get_dec_fract(float_to_fixpt(1.25f), 1) == 3);
  44. CHECK(fixpt_get_dec_fract(float_to_fixpt(1.225f), 1) == 2);
  45. CHECK(fixpt_get_dec_fract(float_to_fixpt(-1.25f), 1) == 3);
  46. CHECK(fixpt_get_dec_fract(float_to_fixpt(-1.225f), 1) == 2);
  47. CHECK(fixpt_get_dec_fract(float_to_fixpt(1.125f), 1) == 1);
  48. CHECK(fixpt_get_dec_fract(float_to_fixpt(1.125f), 2) == 13);
  49. CHECK(fixpt_get_dec_fract(float_to_fixpt(1.125f), 3) == 125);
  50. CHECK(fixpt_get_dec_fract(float_to_fixpt(-1.125f), 1) == 1);
  51. CHECK(fixpt_get_dec_fract(float_to_fixpt(-1.125f), 2) == 13);
  52. CHECK(fixpt_get_dec_fract(float_to_fixpt(-1.125f), 3) == 125);
  53. CHECK(fixpt_get_dec_fract(float_to_fixpt(1.0f), 2) == 0);
  54. CHECK(fixpt_get_dec_fract(float_to_fixpt(-1.0f), 2) == 0);
  55. CHECK(fixpt_get_dec_fract(float_to_fixpt(0.0f), 2) == 0);
  56. }
  57. int main(void)
  58. {
  59. check_common();
  60. return 0;
  61. }