unit_test_001.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. //
  2. // FILE: unit_test_001.cpp
  3. // AUTHOR: Rob Tillaart
  4. // DATE: 2021-01-03
  5. // PURPOSE: unit tests for the RunningMedian
  6. // https://github.com/RobTillaart/RunningMedian
  7. // https://github.com/Arduino-CI/arduino_ci/blob/master/REFERENCE.md
  8. //
  9. // supported assertions
  10. // ----------------------------
  11. // assertEqual(expected, actual); // a == b
  12. // assertNotEqual(unwanted, actual); // a != b
  13. // assertComparativeEquivalent(expected, actual); // abs(a - b) == 0 or (!(a > b) && !(a < b))
  14. // assertComparativeNotEquivalent(unwanted, actual); // abs(a - b) > 0 or ((a > b) || (a < b))
  15. // assertLess(upperBound, actual); // a < b
  16. // assertMore(lowerBound, actual); // a > b
  17. // assertLessOrEqual(upperBound, actual); // a <= b
  18. // assertMoreOrEqual(lowerBound, actual); // a >= b
  19. // assertTrue(actual);
  20. // assertFalse(actual);
  21. // assertNull(actual);
  22. // // special cases for floats
  23. // assertEqualFloat(expected, actual, epsilon); // fabs(a - b) <= epsilon
  24. // assertNotEqualFloat(unwanted, actual, epsilon); // fabs(a - b) >= epsilon
  25. // assertInfinity(actual); // isinf(a)
  26. // assertNotInfinity(actual); // !isinf(a)
  27. // assertNAN(arg); // isnan(a)
  28. // assertNotNAN(arg); // !isnan(a)
  29. #include <ArduinoUnitTests.h>
  30. #include "Arduino.h"
  31. #include "RunningMedian.h"
  32. unittest_setup()
  33. {
  34. fprintf(stderr, "RUNNING_MEDIAN_VERSION: %s\n", (char *) RUNNING_MEDIAN_VERSION);
  35. }
  36. unittest_teardown()
  37. {
  38. }
  39. unittest(test_constants)
  40. {
  41. assertEqual(true, RUNNING_MEDIAN_USE_MALLOC);
  42. assertEqual(255, MEDIAN_MAX_SIZE);
  43. assertEqual( 3, MEDIAN_MIN_SIZE);
  44. }
  45. unittest(test_constructor)
  46. {
  47. RunningMedian samples = RunningMedian(5);
  48. assertEqual(5, samples.getSize());
  49. assertEqual(0, samples.getCount());
  50. // TODO default values?
  51. }
  52. unittest(test_basic_add)
  53. {
  54. RunningMedian samples = RunningMedian(5);
  55. int cnt = 0;
  56. for (int i = 0, cnt = 0; i < 50; i+=10)
  57. {
  58. samples.add(i);
  59. cnt++;
  60. assertEqual(cnt, samples.getCount());
  61. }
  62. assertEqual(5, samples.getSize());
  63. assertEqualFloat(20, samples.getMedian(), 0.0001);
  64. assertEqualFloat(20, samples.getAverage(), 0.0001);
  65. assertEqualFloat(00, samples.getLowest(), 0.0001);
  66. assertEqualFloat(40, samples.getHighest(), 0.0001);
  67. samples.add(100); // 6th element
  68. assertEqual(5, samples.getSize());
  69. assertEqual(5, samples.getCount());
  70. assertEqualFloat(30, samples.getMedian(), 0.0001);
  71. assertEqualFloat(40, samples.getAverage(), 0.0001);
  72. assertEqualFloat(10, samples.getLowest(), 0.0001);
  73. assertEqualFloat(100, samples.getHighest(), 0.0001);
  74. samples.clear();
  75. assertEqual(5, samples.getSize());
  76. assertEqual(0, samples.getCount());
  77. }
  78. unittest(test_big)
  79. {
  80. RunningMedian samples = RunningMedian(100);
  81. assertEqual(100, samples.getSize());
  82. assertEqual(0, samples.getCount());
  83. for (int i = 0; i < 110; i++)
  84. {
  85. samples.add(i);
  86. }
  87. assertEqual(100, samples.getSize());
  88. assertEqual(100, samples.getCount());
  89. assertEqualFloat(59.5, samples.getMedian(), 0.0001);
  90. assertEqualFloat(59.5, samples.getAverage(), 0.0001);
  91. assertEqualFloat(10, samples.getLowest(), 0.0001);
  92. assertEqualFloat(109, samples.getHighest(), 0.0001);
  93. samples.clear();
  94. assertEqual(100, samples.getSize());
  95. assertEqual(0, samples.getCount());
  96. }
  97. unittest_main()
  98. // --------