flipperzero-firmware/applications/tests/irda_decoder/irda_decoder_test.c
SG 1a1c5fa05d
Unit tests: fix IRDA test data (#488)
* Unit tests: fix IRDA test data
* Fix format-errors on test data files
* Fix sticking red/green light on unit-tests

Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: Albert Kharisov <albert@flipperdevices.com>
2021-05-25 12:43:14 +03:00

94 lines
2.8 KiB
C

#include <furi.h>
#include "../minunit.h"
#include "irda.h"
#include "test_data/irda_decoder_nec_test_data.srcdata"
#include "test_data/irda_decoder_samsung_test_data.srcdata"
#define RUN_DECODER(data, expected) \
run_decoder((data), COUNT_OF(data), (expected), COUNT_OF(expected))
static IrdaHandler* decoder;
static void test_setup(void) {
decoder = irda_alloc_decoder();
}
static void test_teardown(void) {
irda_free_decoder(decoder);
}
static void
compare_message_results(const IrdaMessage* message_decoded, const IrdaMessage* message_expected) {
mu_check(message_decoded->protocol == message_expected->protocol);
mu_check(message_decoded->command == message_expected->command);
mu_check(message_decoded->address == message_expected->address);
mu_check(message_decoded->repeat == message_expected->repeat);
}
static void run_decoder(
const uint32_t* input_delays,
uint32_t input_delays_len,
const IrdaMessage* message_expected,
uint32_t message_expected_len) {
const IrdaMessage* message_decoded = 0;
bool level = 1;
uint32_t message_counter = 0;
for(uint32_t i = 0; i < input_delays_len; ++i) {
message_decoded = irda_decode(decoder, level, input_delays[i]);
if(message_decoded) {
mu_assert(message_counter < message_expected_len, "decoded more than expected");
if(message_counter >= message_expected_len) break;
compare_message_results(message_decoded, &message_expected[message_counter]);
++message_counter;
}
level = !level;
}
mu_assert(message_counter == message_expected_len, "decoded less than expected");
}
MU_TEST(test_samsung32) {
RUN_DECODER(test_samsung32_input1, test_samsung32_expected1);
}
MU_TEST(test_mix_nec_samsung32) {
RUN_DECODER(test_samsung32_input1, test_samsung32_expected1);
RUN_DECODER(test_nec_input1, test_nec_expected1);
RUN_DECODER(test_samsung32_input1, test_samsung32_expected1);
RUN_DECODER(test_nec_input2, test_nec_expected2);
}
MU_TEST(test_nec1) {
RUN_DECODER(test_nec_input1, test_nec_expected1);
}
MU_TEST(test_nec2) {
RUN_DECODER(test_nec_input2, test_nec_expected2);
}
MU_TEST(test_unexpected_end_in_sequence) {
// test_nec_input1 and test_nec_input2 shuts unexpected
RUN_DECODER(test_nec_input1, test_nec_expected1);
RUN_DECODER(test_nec_input1, test_nec_expected1);
RUN_DECODER(test_nec_input2, test_nec_expected2);
RUN_DECODER(test_nec_input2, test_nec_expected2);
}
MU_TEST_SUITE(test_irda_decoder) {
MU_SUITE_CONFIGURE(&test_setup, &test_teardown);
MU_RUN_TEST(test_unexpected_end_in_sequence);
MU_RUN_TEST(test_nec1);
MU_RUN_TEST(test_nec2);
MU_RUN_TEST(test_samsung32);
MU_RUN_TEST(test_mix_nec_samsung32);
}
int run_minunit_test_irda_decoder() {
MU_RUN_SUITE(test_irda_decoder);
MU_REPORT();
return MU_EXIT_CODE;
}