irda_decoder_test.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include <furi.h>
  2. #include "../minunit.h"
  3. #include "irda.h"
  4. #include "test_data/irda_decoder_nec_test_data.srcdata"
  5. #include "test_data/irda_decoder_necext_test_data.srcdata"
  6. #include "test_data/irda_decoder_samsung_test_data.srcdata"
  7. #define RUN_DECODER(data, expected) \
  8. run_decoder((data), COUNT_OF(data), (expected), COUNT_OF(expected))
  9. static IrdaHandler* decoder;
  10. static void test_setup(void) {
  11. decoder = irda_alloc_decoder();
  12. }
  13. static void test_teardown(void) {
  14. irda_free_decoder(decoder);
  15. }
  16. static void compare_message_results(
  17. const IrdaMessage* message_decoded,
  18. const IrdaMessage* message_expected) {
  19. mu_check(message_decoded->protocol == message_expected->protocol);
  20. mu_check(message_decoded->command == message_expected->command);
  21. mu_check(message_decoded->address == message_expected->address);
  22. mu_check(message_decoded->repeat == message_expected->repeat);
  23. }
  24. static void run_decoder(
  25. const uint32_t* input_delays,
  26. uint32_t input_delays_len,
  27. const IrdaMessage* message_expected,
  28. uint32_t message_expected_len) {
  29. const IrdaMessage* message_decoded = 0;
  30. bool level = 1;
  31. uint32_t message_counter = 0;
  32. for(uint32_t i = 0; i < input_delays_len; ++i) {
  33. message_decoded = irda_decode(decoder, level, input_delays[i]);
  34. if(message_decoded) {
  35. mu_assert(message_counter < message_expected_len, "decoded more than expected");
  36. if(message_counter >= message_expected_len) break;
  37. compare_message_results(message_decoded, &message_expected[message_counter]);
  38. ++message_counter;
  39. }
  40. level = !level;
  41. }
  42. mu_assert(message_counter == message_expected_len, "decoded less than expected");
  43. }
  44. MU_TEST(test_samsung32) {
  45. RUN_DECODER(test_samsung32_input1, test_samsung32_expected1);
  46. }
  47. MU_TEST(test_mix) {
  48. RUN_DECODER(test_necext_input1, test_necext_expected1);
  49. RUN_DECODER(test_samsung32_input1, test_samsung32_expected1);
  50. RUN_DECODER(test_nec_input1, test_nec_expected1);
  51. RUN_DECODER(test_samsung32_input1, test_samsung32_expected1);
  52. RUN_DECODER(test_necext_input1, test_necext_expected1);
  53. RUN_DECODER(test_nec_input2, test_nec_expected2);
  54. }
  55. MU_TEST(test_nec1) {
  56. RUN_DECODER(test_nec_input1, test_nec_expected1);
  57. }
  58. MU_TEST(test_nec2) {
  59. RUN_DECODER(test_nec_input2, test_nec_expected2);
  60. }
  61. MU_TEST(test_unexpected_end_in_sequence) {
  62. // test_nec_input1 and test_nec_input2 shuts unexpected
  63. RUN_DECODER(test_nec_input1, test_nec_expected1);
  64. RUN_DECODER(test_nec_input1, test_nec_expected1);
  65. RUN_DECODER(test_nec_input2, test_nec_expected2);
  66. RUN_DECODER(test_nec_input2, test_nec_expected2);
  67. }
  68. MU_TEST(test_necext1) {
  69. RUN_DECODER(test_necext_input1, test_necext_expected1);
  70. RUN_DECODER(test_necext_input1, test_necext_expected1);
  71. }
  72. MU_TEST_SUITE(test_irda_decoder) {
  73. MU_SUITE_CONFIGURE(&test_setup, &test_teardown);
  74. MU_RUN_TEST(test_unexpected_end_in_sequence);
  75. MU_RUN_TEST(test_nec1);
  76. MU_RUN_TEST(test_nec2);
  77. MU_RUN_TEST(test_samsung32);
  78. MU_RUN_TEST(test_necext1);
  79. MU_RUN_TEST(test_mix);
  80. }
  81. int run_minunit_test_irda_decoder() {
  82. MU_RUN_SUITE(test_irda_decoder);
  83. MU_REPORT();
  84. return MU_EXIT_CODE;
  85. }