From 2fbeb471915cae6c6f419c779aeb8b29b1ef41e8 Mon Sep 17 00:00:00 2001 From: Ed Date: Mon, 15 Apr 2024 10:38:19 +0100 Subject: [PATCH] Midi parse test passing --- lib_xua/src/midi/midiinparse.h | 2 +- .../test_midi_parse/hid_report_descriptor.h | 2 +- .../src/test_midi_parse/test_midi_parse.c | 179 ++++++++++++++++-- .../src/xua_unit_test_helper.xc | 7 +- tests/xua_unit_tests/src/xua_unit_tests.h | 3 +- 5 files changed, 170 insertions(+), 23 deletions(-) diff --git a/lib_xua/src/midi/midiinparse.h b/lib_xua/src/midi/midiinparse.h index bd03f385..4b55f872 100644 --- a/lib_xua/src/midi/midiinparse.h +++ b/lib_xua/src/midi/midiinparse.h @@ -1,4 +1,4 @@ -// Copyright 2011-2021 XMOS LIMITED. +// Copyright 2011-2024 XMOS LIMITED. // This Software is subject to the terms of the XMOS Public Licence: Version 1. #ifndef MIDIINPARSE_XH #define MIDIINPARSE_XH diff --git a/tests/xua_unit_tests/src/test_midi_parse/hid_report_descriptor.h b/tests/xua_unit_tests/src/test_midi_parse/hid_report_descriptor.h index ced88b83..3824814e 100644 --- a/tests/xua_unit_tests/src/test_midi_parse/hid_report_descriptor.h +++ b/tests/xua_unit_tests/src/test_midi_parse/hid_report_descriptor.h @@ -1,4 +1,4 @@ -// Copyright 2021-2022 XMOS LIMITED. +// Copyright 2021-2024 XMOS LIMITED. // This Software is subject to the terms of the XMOS Public Licence: Version 1. #ifndef __hid_report_descriptor_h__ diff --git a/tests/xua_unit_tests/src/test_midi_parse/test_midi_parse.c b/tests/xua_unit_tests/src/test_midi_parse/test_midi_parse.c index 5d9f66a1..89989429 100644 --- a/tests/xua_unit_tests/src/test_midi_parse/test_midi_parse.c +++ b/tests/xua_unit_tests/src/test_midi_parse/test_midi_parse.c @@ -6,14 +6,26 @@ #include "xua_unit_tests.h" #include "../../../lib_xua/src/midi/midiinparse.h" +#define NUM_CHANS 16 +#define NOTE_OFF 128 +#define NOTE_ON 144 +#define PRESSURE 160 +#define CONTROL 176 +#define PROGRAM 192 +#define PRESSURE_VAL 208 +#define RANGE 224 +#define MANUFACTURE_ID 240 -#define CABLE_NUM 0 +#define DATA_RANGE 128 +#define DATA_MASK (DATA_RANGE - 1) -#define NOTE_ON 0x90 -#define PITCH 60 -#define VELOCITY 80 +#define NUM_TESTS_PER_TEST 10 -void something(void){ +#define CABLE_NUM 2 +#define RANDOM_SEED 6031769 + +unsigned mini_in_parse_ut(unsigned midi[3]){ + // printf("Composing data: 0x%x 0x%x 0x%x\n", midi[0], midi[1], midi[2]); struct midi_in_parse_state m_state; void * mips = &m_state; @@ -21,22 +33,151 @@ void something(void){ unsigned valid = 0; unsigned packed = 0; - midi_in_parse_wrap(mips, CABLE_NUM, NOTE_ON, &valid, &packed); - printf("Valid: %d data: %u\n", valid, packed); - midi_in_parse_wrap(mips, CABLE_NUM, PITCH, &valid, &packed); - printf("Valid: %d data: %u\n", valid, packed); - midi_in_parse_wrap(mips, CABLE_NUM, VELOCITY, &valid, &packed); - printf("Valid: %d data: %u\n", valid, packed); + midi_in_parse_wrap(mips, CABLE_NUM, midi[0], &valid, &packed); + // printf("Valid: %d data: %u\n", valid, packed); + if(valid){ + return packed; + } + midi_in_parse_wrap(mips, CABLE_NUM, midi[1], &valid, &packed); + // printf("Valid: %d data: %u\n", valid, packed); + if(valid){ + return packed; + } + midi_in_parse_wrap(mips, CABLE_NUM, midi[2], &valid, &packed); + // printf("Valid: %d data: %u\n", valid, packed); + if(valid){ + return packed; + } - unsigned midi[3]; - unsigned size = 0; - - midi_out_parse_wrap(packed, midi, &size); - printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi[0], midi[1], midi[2]); + return 0; } -void test_midi_tx(void) { - TEST_ASSERT_EQUAL_UINT(3, 3); - something(); +unsigned rndm = RANDOM_SEED; + + +void test_note(void) { + for(int cmd = NOTE_OFF; cmd < NOTE_ON + NUM_CHANS; cmd++){ + for(int test = 0; test < NUM_TESTS_PER_TEST; test++){ + unsigned midi_ref[3] = {cmd, random(&rndm) & DATA_MASK, random(&rndm) & DATA_MASK}; + unsigned packed = mini_in_parse_ut(midi_ref); + unsigned midi_dut[3] = {0}; + unsigned size = 0; + midi_out_parse_wrap(packed, midi_dut, &size); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_ref[0], midi_ref[1], midi_ref[2]); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_dut[0], midi_dut[1], midi_dut[2]); + //TEST_ASSERT_EQUAL_UINT32_ARRAY not working!? + for(int i = 0; i < size; i++){ + TEST_ASSERT_EQUAL_UINT32(midi_ref[i], midi_dut[i]); + } + } + } } + +void test_pressure(void) { + for(int cmd = PRESSURE; cmd < PRESSURE + NUM_CHANS; cmd++){ + for(int test = 0; test < NUM_TESTS_PER_TEST; test++){ + unsigned midi_ref[3] = {cmd, random(&rndm) & DATA_MASK, random(&rndm) & DATA_MASK}; + unsigned packed = mini_in_parse_ut(midi_ref); + unsigned midi_dut[3] = {0}; + unsigned size = 0; + midi_out_parse_wrap(packed, midi_dut, &size); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_ref[0], midi_ref[1], midi_ref[2]); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_dut[0], midi_dut[1], midi_dut[2]); + //TEST_ASSERT_EQUAL_UINT32_ARRAY not working!? + for(int i = 0; i < size; i++){ + TEST_ASSERT_EQUAL_UINT32(midi_ref[i], midi_dut[i]); + } + } + } +} + +void test_control(void) { + for(int cmd = CONTROL; cmd < CONTROL + NUM_CHANS; cmd++){ + for(int test = 0; test < NUM_TESTS_PER_TEST; test++){ + unsigned midi_ref[3] = {cmd, random(&rndm) & DATA_MASK, random(&rndm) & DATA_MASK}; + unsigned packed = mini_in_parse_ut(midi_ref); + unsigned midi_dut[3] = {0}; + unsigned size = 0; + midi_out_parse_wrap(packed, midi_dut, &size); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_ref[0], midi_ref[1], midi_ref[2]); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_dut[0], midi_dut[1], midi_dut[2]); + //TEST_ASSERT_EQUAL_UINT32_ARRAY not working!? + for(int i = 0; i < size; i++){ + TEST_ASSERT_EQUAL_UINT32(midi_ref[i], midi_dut[i]); + } + } + } +} + +void test_program(void) { + for(int cmd = PROGRAM; cmd < PROGRAM + NUM_CHANS; cmd++){ + for(int test = 0; test < NUM_TESTS_PER_TEST; test++){ + unsigned midi_ref[3] = {cmd, random(&rndm) & DATA_MASK, random(&rndm) & DATA_MASK}; + unsigned packed = mini_in_parse_ut(midi_ref); + unsigned midi_dut[3] = {0}; + unsigned size = 0; + midi_out_parse_wrap(packed, midi_dut, &size); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_ref[0], midi_ref[1], midi_ref[2]); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_dut[0], midi_dut[1], midi_dut[2]); + //TEST_ASSERT_EQUAL_UINT32_ARRAY not working!? + for(int i = 0; i < size; i++){ + TEST_ASSERT_EQUAL_UINT32(midi_ref[i], midi_dut[i]); + } + } + } +} + +void test_pressure_val(void) { + for(int cmd = PRESSURE_VAL; cmd < PRESSURE_VAL + NUM_CHANS; cmd++){ + for(int test = 0; test < NUM_TESTS_PER_TEST; test++){ + unsigned midi_ref[3] = {cmd, random(&rndm) & DATA_MASK, random(&rndm) & DATA_MASK}; + unsigned packed = mini_in_parse_ut(midi_ref); + unsigned midi_dut[3] = {0}; + unsigned size = 0; + midi_out_parse_wrap(packed, midi_dut, &size); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_ref[0], midi_ref[1], midi_ref[2]); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_dut[0], midi_dut[1], midi_dut[2]); + //TEST_ASSERT_EQUAL_UINT32_ARRAY not working!? + for(int i = 0; i < size; i++){ + TEST_ASSERT_EQUAL_UINT32(midi_ref[i], midi_dut[i]); + } + } + } +} + +void test_range(void) { + for(int cmd = RANGE; cmd < RANGE + NUM_CHANS; cmd++){ + for(int test = 0; test < NUM_TESTS_PER_TEST; test++){ + unsigned midi_ref[3] = {cmd, random(&rndm) & DATA_MASK, random(&rndm) & DATA_MASK}; + unsigned packed = mini_in_parse_ut(midi_ref); + unsigned midi_dut[3] = {0}; + unsigned size = 0; + midi_out_parse_wrap(packed, midi_dut, &size); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_ref[0], midi_ref[1], midi_ref[2]); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_dut[0], midi_dut[1], midi_dut[2]); + //TEST_ASSERT_EQUAL_UINT32_ARRAY not working!? + for(int i = 0; i < size; i++){ + TEST_ASSERT_EQUAL_UINT32(midi_ref[i], midi_dut[i]); + } + } + } +} + +void test_manufacturer_id(void) { + for(int cmd = MANUFACTURE_ID; cmd < MANUFACTURE_ID + NUM_CHANS; cmd++){ + for(int test = 0; test < NUM_TESTS_PER_TEST; test++){ + unsigned midi_ref[3] = {cmd, random(&rndm) & DATA_MASK, random(&rndm) & DATA_MASK}; + unsigned packed = mini_in_parse_ut(midi_ref); + unsigned midi_dut[3] = {0}; + unsigned size = 0; + midi_out_parse_wrap(packed, midi_dut, &size); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_ref[0], midi_ref[1], midi_ref[2]); + // printf("size: %d data: 0x%x 0x%x 0x%x\n", size, midi_dut[0], midi_dut[1], midi_dut[2]); + //TEST_ASSERT_EQUAL_UINT32_ARRAY not working!? + for(int i = 0; i < size; i++){ + TEST_ASSERT_EQUAL_UINT32(midi_ref[i], midi_dut[i]); + } + } + } +} \ No newline at end of file diff --git a/tests/xua_unit_tests/src/xua_unit_test_helper.xc b/tests/xua_unit_tests/src/xua_unit_test_helper.xc index aa151ddf..48f82d3f 100644 --- a/tests/xua_unit_tests/src/xua_unit_test_helper.xc +++ b/tests/xua_unit_tests/src/xua_unit_test_helper.xc @@ -1,4 +1,4 @@ -// Copyright 2021 XMOS LIMITED. +// Copyright 2021-2024 XMOS LIMITED. // This Software is subject to the terms of the XMOS Public Licence: Version 1. #ifdef __XC__ @@ -28,6 +28,11 @@ void AudioHwInit() ; // nothing } +unsigned random(unsigned &x){ + crc32(x, -1, 0xEB31D82E); + return x; +} + // Wrappers for midi parse because C doesn't support return tuples void midi_in_parse_wrap(void * unsafe mips, unsigned cable_number, unsigned char b, unsigned * unsafe valid, unsigned *unsafe packed){ unsafe{ diff --git a/tests/xua_unit_tests/src/xua_unit_tests.h b/tests/xua_unit_tests/src/xua_unit_tests.h index a8536150..7763b97a 100644 --- a/tests/xua_unit_tests/src/xua_unit_tests.h +++ b/tests/xua_unit_tests/src/xua_unit_tests.h @@ -1,4 +1,4 @@ -// Copyright 2021 XMOS LIMITED. +// Copyright 2021-2024 XMOS LIMITED. // This Software is subject to the terms of the XMOS Public Licence: Version 1. #ifndef XUA_UNIT_TESTS_H_ #define XUA_UNIT_TESTS_H_ @@ -10,6 +10,7 @@ void midi_in_parse_wrap(void * mips, unsigned cable_number, unsigned char b, unsigned * valid, unsigned * packed); void midi_out_parse_wrap(unsigned tx_data, unsigned midi[3], unsigned * size); void reset_midi_state_wrap(void *mips); +unsigned random(unsigned *x); #endif #endif /* XUA_UNIT_TESTS_H_ */