diff options
| author | drowe67 <[email protected]> | 2023-07-20 08:59:48 +0930 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-07-20 08:59:48 +0930 |
| commit | 06d4c11e699b0351765f10398abb4f663a984f36 (patch) | |
| tree | 33e22af0814c5b6c3d676f096ae8c2ac8a3ed9f0 /unittest/tfreedv_data_channel.c | |
| parent | 6588e77f38bdebd7adffe091b22e7760d95d0ccb (diff) | |
| parent | 4d6c143c0abec15e1d6ed1fd95d36f80e6cb7df8 (diff) | |
Merge pull request #3 from drowe67/dr-cleanup21.2.0
Cleanup Part 2
Diffstat (limited to 'unittest/tfreedv_data_channel.c')
| -rw-r--r-- | unittest/tfreedv_data_channel.c | 393 |
1 files changed, 180 insertions, 213 deletions
diff --git a/unittest/tfreedv_data_channel.c b/unittest/tfreedv_data_channel.c index ef713eb..e94cadc 100644 --- a/unittest/tfreedv_data_channel.c +++ b/unittest/tfreedv_data_channel.c @@ -26,290 +26,257 @@ along with this program; if not, see <http://www.gnu.org/licenses/>. */ -#include "freedv_data_channel.h" - #include <stdio.h> #include <string.h> -unsigned char test_header[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; -unsigned char bcast_header[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; +#include "freedv_data_channel.h" +unsigned char test_header[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; +unsigned char bcast_header[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; struct testvec { - char *testname; - - unsigned char *data; - size_t data_size; - - size_t frame_size; - - unsigned char *frame_data; - size_t frame_data_size; - - unsigned char *flags; + char *testname; + + unsigned char *data; + size_t data_size; + + size_t frame_size; + + unsigned char *frame_data; + size_t frame_data_size; + + unsigned char *flags; } testvec[] = { { "Regular packet, does not match header and no broadcast", - (unsigned char[]){ - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x12 - }, + (unsigned char[]){0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12}, 0x12, 8, - (unsigned char[]){ - 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x01, 0x02, - 0x03, 0x04, 0x05, 0x06, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x12, 0x47, 0x6e - }, + (unsigned char[]){0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x47, 0x6e}, 0x14, - (unsigned char[]){ 0x00, 0x00, 0x04 }, + (unsigned char[]){0x00, 0x00, 0x04}, }, { "Header", NULL, 0, 8, - (unsigned char[]){ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x5a, 0x60 }, + (unsigned char[]){0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x5a, 0x60}, 0x08, - (unsigned char[]){ 0x08 }, + (unsigned char[]){0x08}, }, { "Broadcast packet", - (unsigned char[]){ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x22, - 0x33, 0x44, 0x55, 0x66, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11 - }, + (unsigned char[]){0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x22, 0x33, + 0x44, 0x55, 0x66, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11}, 0x19, 8, - (unsigned char[]){ - 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x3c, 0xbe - }, + (unsigned char[]){0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x3c, 0xbe}, 0x0f, - (unsigned char[]){ 0xc0, 0x07 }, + (unsigned char[]){0xc0, 0x07}, }, { "Broadcast packet, header does not match", - (unsigned char[]){ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x22, - 0xbb, 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11 - }, + (unsigned char[]){0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x22, 0xbb, + 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11}, 0x19, 8, - (unsigned char[]){ - 0xaa, 0x22, - 0xbb, 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x1a, 0x68 - }, + (unsigned char[]){0xaa, 0x22, 0xbb, 0xcc, 0xdd, 0xee, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, + 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x1a, 0x68}, 0x15, - (unsigned char[]){ 0x40, 0x00, 0x05 }, + (unsigned char[]){0x40, 0x00, 0x05}, }, { "Header 6 bytes", NULL, 0, 6, - (unsigned char[]){ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }, + (unsigned char[]){0x11, 0x22, 0x33, 0x44, 0x55, 0x66}, 0x06, - (unsigned char[]){ 0x2f }, + (unsigned char[]){0x2f}, }, { "Broadcast packet (6 byte frames)", - (unsigned char[]){ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x22, - 0x33, 0x44, 0x55, 0x66, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11 - }, + (unsigned char[]){0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x22, 0x33, + 0x44, 0x55, 0x66, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11}, 0x19, 6, - (unsigned char[]){ - 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x3c, 0xbe - }, + (unsigned char[]){0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x3c, 0xbe}, 0x0f, - (unsigned char[]){ 0xc0, 0x00, 0x03 }, + (unsigned char[]){0xc0, 0x00, 0x03}, }, { "Broadcast packet, header does not match (6 byte frames)", - (unsigned char[]){ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x22, - 0xbb, 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11 - }, + (unsigned char[]){0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x22, 0xbb, + 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11}, 0x19, 6, - (unsigned char[]){ - 0xaa, 0x22, - 0xbb, 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x1a, 0x68 - }, + (unsigned char[]){0xaa, 0x22, 0xbb, 0xcc, 0xdd, 0xee, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, + 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x1a, 0x68}, 0x15, - (unsigned char[]){ 0x40, 0x00, 0x00, 0x03 }, + (unsigned char[]){0x40, 0x00, 0x00, 0x03}, }, }; - static int ret = 0; static int vector = 0; static size_t frame_data_pos = 0; static int rx_done = 0; -void *tx_cb_arg = (void*)0xaa55; -void *rx_cb_arg = (void*)0xbb44; +void *tx_cb_arg = (void *)0xaa55; +void *rx_cb_arg = (void *)0xbb44; -void tfreedv_data_callback_tx(void *arg, unsigned char *packet, size_t *size) -{ - if (tx_cb_arg != arg) { - ret++; - printf("FAIL: %s called with wrong argument value\n", __func__); - } - printf("--------------------------------------\n"); - printf("TX callback called for test %zd bytes data for test %d:\n'%s'\n", - testvec[vector].data_size, vector, - testvec[vector].testname); - - memcpy(packet, testvec[vector].data, testvec[vector].data_size); - *size = testvec[vector].data_size; - - return; +void tfreedv_data_callback_tx(void *arg, unsigned char *packet, size_t *size) { + if (tx_cb_arg != arg) { + ret++; + printf("FAIL: %s called with wrong argument value\n", __func__); + } + printf("--------------------------------------\n"); + printf("TX callback called for test %zd bytes data for test %d:\n'%s'\n", + testvec[vector].data_size, vector, testvec[vector].testname); + + memcpy(packet, testvec[vector].data, testvec[vector].data_size); + *size = testvec[vector].data_size; + + return; } -void tfreedv_data_callback_rx(void *arg, unsigned char *packet, size_t size) -{ - if (rx_cb_arg != arg) { - ret++; - printf("FAIL: %s called with wrong argument value\n", __func__); - } - printf("RX callback called with %zd bytes\n", size); - - if (testvec[vector].data_size) { - size_t data_size = testvec[vector].data_size; - if (data_size != size) { - printf("FAIL: Received size does not match test vector: %zd != %zd\n", - size, data_size); - ret++; - } else { - size_t i; - for (i = 0; i < data_size; i++) { - if (packet[i] != testvec[vector].data[i]) { - printf("FAIL: byte %zd does not match 0x%02x != 0x%02x\n", - i, packet[i], testvec[vector].data[i]); - ret++; - } - } - } +void tfreedv_data_callback_rx(void *arg, unsigned char *packet, size_t size) { + if (rx_cb_arg != arg) { + ret++; + printf("FAIL: %s called with wrong argument value\n", __func__); + } + printf("RX callback called with %zd bytes\n", size); + + if (testvec[vector].data_size) { + size_t data_size = testvec[vector].data_size; + if (data_size != size) { + printf("FAIL: Received size does not match test vector: %zd != %zd\n", + size, data_size); + ret++; } else { - if (size != 12) { - printf("FAIL: Received header is not 12 bytes: %zd\n", size); - ret++; - } else { - if (memcmp(packet, bcast_header, 6)) { - printf("FAIL: Header is not a broadcast!\n"); - ret++; - } - if (memcmp(packet+6, test_header, 6)) { - printf("FAIL: Header does not match!\n"); - ret++; - } + size_t i; + for (i = 0; i < data_size; i++) { + if (packet[i] != testvec[vector].data[i]) { + printf("FAIL: byte %zd does not match 0x%02x != 0x%02x\n", i, + packet[i], testvec[vector].data[i]); + ret++; } + } + } + } else { + if (size != 12) { + printf("FAIL: Received header is not 12 bytes: %zd\n", size); + ret++; + } else { + if (memcmp(packet, bcast_header, 6)) { + printf("FAIL: Header is not a broadcast!\n"); + ret++; + } + if (memcmp(packet + 6, test_header, 6)) { + printf("FAIL: Header does not match!\n"); + ret++; + } } - - rx_done = 1; + } + + rx_done = 1; } -int main(int argc, char **argv) -{ - struct freedv_data_channel *fdc; - - fdc = freedv_data_channel_create(); - - freedv_data_set_header(fdc, test_header); - freedv_data_set_cb_tx(fdc, tfreedv_data_callback_tx, tx_cb_arg); - freedv_data_set_cb_rx(fdc, tfreedv_data_callback_rx, rx_cb_arg); - - while (vector < sizeof(testvec)/sizeof(struct testvec)) { - size_t frame_size = testvec[vector].frame_size; - unsigned char frame[frame_size]; - int from, bcast, crc, end; - int i; - size_t check_size; - unsigned char flags; - int nr_frames; - - freedv_data_channel_tx_frame(fdc, frame, frame_size, &from, &bcast, &crc, &end); - - check_size = frame_size; - if (frame_data_pos + check_size > testvec[vector].frame_data_size) - check_size = testvec[vector].frame_data_size - frame_data_pos; - - flags = from * 0x80 + bcast * 0x40 + crc * 0x20 + end; - printf("0x%02x:", flags); - for (i = 0; i < check_size; i++) { - if (frame[i] != testvec[vector].frame_data[frame_data_pos + i]) { - printf(" [0x%02x!=0x%02x]", - frame[i], testvec[vector].frame_data[frame_data_pos + i]); - ret++; - } else { - printf(" 0x%02x", frame[i]); - } - } - printf("\n"); - - if (flags != testvec[vector].flags[frame_data_pos / frame_size]) { - printf("FAIL: Flags byte does not match 0x%02x != 0x%02x\n", - flags, testvec[vector].flags[frame_data_pos / frame_size]); - ret++; - } +int main(int argc, char **argv) { + struct freedv_data_channel *fdc; - freedv_data_channel_rx_frame(fdc, frame, frame_size, from, bcast, crc, end); - - frame_data_pos += frame_size; - - nr_frames = freedv_data_get_n_tx_frames(fdc, frame_size); - - if (frame_data_pos >= testvec[vector].frame_data_size) { - if (nr_frames) { - printf("FAIL: nr_frames is not zero: %d\n", nr_frames); - ret++; - } - vector++; - frame_data_pos = 0; - if (!rx_done) { - printf("FAIL: RX callback not executed\n"); - ret++; - } - rx_done = 0; - } else { - int vec_frames = (testvec[vector].frame_data_size - frame_data_pos); - vec_frames /= frame_size; - vec_frames++; - if (nr_frames != vec_frames) { - printf("FAIL: nr_frames != vec_frames: %d != %d\n", nr_frames, vec_frames); - ret++; - } - } + fdc = freedv_data_channel_create(); + + freedv_data_set_header(fdc, test_header); + freedv_data_set_cb_tx(fdc, tfreedv_data_callback_tx, tx_cb_arg); + freedv_data_set_cb_rx(fdc, tfreedv_data_callback_rx, rx_cb_arg); + + while (vector < sizeof(testvec) / sizeof(struct testvec)) { + size_t frame_size = testvec[vector].frame_size; + unsigned char frame[frame_size]; + int from, bcast, crc, end; + int i; + size_t check_size; + unsigned char flags; + int nr_frames; + + freedv_data_channel_tx_frame(fdc, frame, frame_size, &from, &bcast, &crc, + &end); + + check_size = frame_size; + if (frame_data_pos + check_size > testvec[vector].frame_data_size) + check_size = testvec[vector].frame_data_size - frame_data_pos; + + flags = from * 0x80 + bcast * 0x40 + crc * 0x20 + end; + printf("0x%02x:", flags); + for (i = 0; i < check_size; i++) { + if (frame[i] != testvec[vector].frame_data[frame_data_pos + i]) { + printf(" [0x%02x!=0x%02x]", frame[i], + testvec[vector].frame_data[frame_data_pos + i]); + ret++; + } else { + printf(" 0x%02x", frame[i]); + } } + printf("\n"); - freedv_data_channel_destroy(fdc); + if (flags != testvec[vector].flags[frame_data_pos / frame_size]) { + printf("FAIL: Flags byte does not match 0x%02x != 0x%02x\n", flags, + testvec[vector].flags[frame_data_pos / frame_size]); + ret++; + } + + freedv_data_channel_rx_frame(fdc, frame, frame_size, from, bcast, crc, end); + + frame_data_pos += frame_size; - printf("--------------------------------------\n"); - printf("tfreedv_data_channel test result: "); - if (ret) { - printf("Failed %d\n", ret); + nr_frames = freedv_data_get_n_tx_frames(fdc, frame_size); + + if (frame_data_pos >= testvec[vector].frame_data_size) { + if (nr_frames) { + printf("FAIL: nr_frames is not zero: %d\n", nr_frames); + ret++; + } + vector++; + frame_data_pos = 0; + if (!rx_done) { + printf("FAIL: RX callback not executed\n"); + ret++; + } + rx_done = 0; } else { - printf("Passed\n"); + int vec_frames = (testvec[vector].frame_data_size - frame_data_pos); + vec_frames /= frame_size; + vec_frames++; + if (nr_frames != vec_frames) { + printf("FAIL: nr_frames != vec_frames: %d != %d\n", nr_frames, + vec_frames); + ret++; + } } + } + + freedv_data_channel_destroy(fdc); + + printf("--------------------------------------\n"); + printf("tfreedv_data_channel test result: "); + if (ret) { + printf("Failed %d\n", ret); + } else { + printf("Passed\n"); + } - return ret; + return ret; } |
