22#include <flipper_format.h>
33#include <infrared.h>
44#include <common/infrared_common_i.h>
5+ #include <lib/infrared/signal/infrared_brute_force.h>
56#include "../test.h" // IWYU pragma: keep
67
78#define IR_TEST_FILES_DIR EXT_PATH("unit_tests/infrared/")
@@ -13,6 +14,7 @@ typedef struct {
1314 InfraredEncoderHandler * encoder_handler ;
1415 FuriString * file_path ;
1516 FlipperFormat * ff ;
17+ InfraredBruteForce * brutedb ;
1618} InfraredTest ;
1719
1820static InfraredTest * test ;
@@ -24,12 +26,14 @@ static void infrared_test_alloc(void) {
2426 test -> encoder_handler = infrared_alloc_encoder ();
2527 test -> ff = flipper_format_buffered_file_alloc (storage );
2628 test -> file_path = furi_string_alloc ();
29+ test -> brutedb = infrared_brute_force_alloc ();
2730}
2831
2932static void infrared_test_free (void ) {
3033 furi_check (test );
3134 infrared_free_decoder (test -> decoder_handler );
3235 infrared_free_encoder (test -> encoder_handler );
36+ infrared_brute_force_free (test -> brutedb );
3337 flipper_format_free (test -> ff );
3438 furi_string_free (test -> file_path );
3539 furi_record_close (RECORD_STORAGE );
@@ -523,6 +527,74 @@ MU_TEST(infrared_test_encoder_decoder_all) {
523527 infrared_test_run_encoder_decoder (InfraredProtocolPioneer , 1 );
524528}
525529
530+ MU_TEST (infrared_test_ac_database ) {
531+ infrared_brute_force_set_db_filename (test -> brutedb , EXT_PATH ("infrared/assets/ac.ir" ));
532+ uint32_t i = 0 ;
533+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Off" );
534+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Dh" );
535+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Cool_hi" );
536+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Heat_hi" );
537+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Cool_lo" );
538+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Heat_lo" );
539+
540+ mu_assert (
541+ infrared_brute_force_calculate_messages (test -> brutedb ) == InfraredErrorCodeNone ,
542+ "universal ac database is invalid" );
543+
544+ infrared_brute_force_reset (test -> brutedb );
545+ }
546+
547+ MU_TEST (infrared_test_audio_database ) {
548+ infrared_brute_force_set_db_filename (test -> brutedb , EXT_PATH ("infrared/assets/audio.ir" ));
549+ uint32_t i = 0 ;
550+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Power" );
551+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Mute" );
552+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Play" );
553+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Pause" );
554+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Prev" );
555+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Next" );
556+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Vol_dn" );
557+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Vol_up" );
558+
559+ mu_assert (
560+ infrared_brute_force_calculate_messages (test -> brutedb ) == InfraredErrorCodeNone ,
561+ "universal audio database is invalid" );
562+
563+ infrared_brute_force_reset (test -> brutedb );
564+ }
565+
566+ MU_TEST (infrared_test_projector_database ) {
567+ infrared_brute_force_set_db_filename (test -> brutedb , EXT_PATH ("infrared/assets/projector.ir" ));
568+ uint32_t i = 0 ;
569+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Power" );
570+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Mute" );
571+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Vol_up" );
572+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Vol_dn" );
573+
574+ mu_assert (
575+ infrared_brute_force_calculate_messages (test -> brutedb ) == InfraredErrorCodeNone ,
576+ "universal projector database is invalid" );
577+
578+ infrared_brute_force_reset (test -> brutedb );
579+ }
580+
581+ MU_TEST (infrared_test_tv_database ) {
582+ infrared_brute_force_set_db_filename (test -> brutedb , EXT_PATH ("infrared/assets/tv.ir" ));
583+ uint32_t i = 0 ;
584+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Power" );
585+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Mute" );
586+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Vol_up" );
587+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Ch_next" );
588+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Vol_dn" );
589+ infrared_brute_force_add_record (test -> brutedb , i ++ , "Ch_prev" );
590+
591+ mu_assert (
592+ infrared_brute_force_calculate_messages (test -> brutedb ) == InfraredErrorCodeNone ,
593+ "universal tv database is invalid" );
594+
595+ infrared_brute_force_reset (test -> brutedb );
596+ }
597+
526598MU_TEST_SUITE (infrared_test ) {
527599 MU_SUITE_CONFIGURE (& infrared_test_alloc , & infrared_test_free );
528600
@@ -543,6 +615,10 @@ MU_TEST_SUITE(infrared_test) {
543615 MU_RUN_TEST (infrared_test_decoder_pioneer );
544616 MU_RUN_TEST (infrared_test_decoder_mixed );
545617 MU_RUN_TEST (infrared_test_encoder_decoder_all );
618+ MU_RUN_TEST (infrared_test_ac_database );
619+ MU_RUN_TEST (infrared_test_audio_database );
620+ MU_RUN_TEST (infrared_test_projector_database );
621+ MU_RUN_TEST (infrared_test_tv_database );
546622}
547623
548624int run_minunit_test_infrared (void ) {
0 commit comments