#include "ut_utils.h" #include "..\..\src\hw\board\utils\utils.h" static int ut_util_invert_8b(uint8_t x, uint8_t exp_out) { printf(" Input:%d\n", x); uint8_t out = util_invert_8b(x); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_invert_8b_test(void) { printf("******************************************************\n"); printf("uint8_t util_invert_8b(uint8_t x)\n"); int test_res; int pass = 1; uint8_t inp; uint8_t exp_out; inp = 0; exp_out = 1; test_res = ut_util_invert_8b(inp, exp_out); if(!test_res) pass = 0; inp = 1; exp_out = 0; test_res = ut_util_invert_8b(inp, exp_out); if(!test_res) pass = 0; inp = 257; exp_out = 0; test_res = ut_util_invert_8b(inp, exp_out); if(!test_res) pass = 0; inp = -1; exp_out = 0; test_res = ut_util_invert_8b(inp, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_sat_add_8b(uint8_t x, uint8_t y, uint8_t exp_out) { printf(" Input: x:%d y:%d\n", x, y); uint8_t out = util_sat_add_8b(x,y); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_sat_add_8b_test(void) { printf("******************************************************\n"); printf("uint8_t util_sat_add_8b(uint8_t x, uint8_t y)\n"); int test_res; int pass = 1; uint8_t inp_x; uint8_t inp_y; uint8_t exp_out; inp_x = 0; inp_y = 0; exp_out = 0; test_res = ut_util_sat_add_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 5; inp_y = 6; exp_out = 11; test_res = ut_util_sat_add_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 4; inp_y = 9; exp_out = 13; test_res = ut_util_sat_add_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 254; inp_y = 1; exp_out = 255; test_res = ut_util_sat_add_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 1; inp_y = 254; exp_out = 255; test_res = ut_util_sat_add_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 1; inp_y = 255; exp_out = 255; test_res = ut_util_sat_add_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 255; inp_y = 1; exp_out = 255; test_res = ut_util_sat_add_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 255; inp_y = 255; exp_out = 255; test_res = ut_util_sat_add_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_sat_subtract_8b(uint8_t x, uint8_t y, uint8_t exp_out) { printf(" Input: x:%d y:%d\n", x, y); uint8_t out = util_sat_subtract_8b(x,y); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_sat_subtract_8b_test(void) { printf("******************************************************\n"); printf("uint8_t util_sat_subtract_8b(uint8_t x, uint8_t y)\n"); int test_res; int pass = 1; uint8_t inp_x; uint8_t inp_y; uint8_t exp_out; inp_x = 0; inp_y = 0; exp_out = 0; test_res = ut_util_sat_subtract_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 50; inp_y = 10; exp_out = 40; test_res = ut_util_sat_subtract_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 70; inp_y = 0; exp_out = 70; test_res = ut_util_sat_subtract_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 60; inp_y = 50; exp_out = 10; test_res = ut_util_sat_subtract_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 10; inp_y = 50; exp_out = 0; test_res = ut_util_sat_subtract_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 0; inp_y = 255; exp_out = 0; test_res = ut_util_sat_subtract_8b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_sat_add_16b(uint16_t x, uint16_t y, uint16_t exp_out) { printf(" Input: x:%d y:%d\n", x, y); uint16_t out = util_sat_add_16b(x,y); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_sat_util_sat_add_16b_test(void) { printf("******************************************************\n"); printf("uint16_t util_sat_add_16b(uint16_t x, uint16_t y)\n"); int test_res; int pass = 1; uint16_t inp_x; uint16_t inp_y; uint16_t exp_out; inp_x = 0; inp_y = 0; exp_out = 0; test_res = ut_util_sat_add_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 10; inp_y = 15; exp_out = 25; test_res = ut_util_sat_add_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 25; inp_y = 35; exp_out = 60; test_res = ut_util_sat_add_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 0; inp_y = 0xFFFF; exp_out = 0xFFFF; test_res = ut_util_sat_add_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 100; inp_y = 0xFFFF; exp_out = 0xFFFF; test_res = ut_util_sat_add_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 45867; inp_y = 47841; exp_out = 0xFFFF; test_res = ut_util_sat_add_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 0xFFFF; inp_y = 0xFFFF; exp_out = 0xFFFF; test_res = ut_util_sat_add_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_sat_subtract_16b(uint16_t x, uint16_t y, uint16_t exp_out) { printf(" Input: x:%d y:%d\n", x, y); uint16_t out = util_sat_subtract_16b(x,y); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_sat_subtract_16b_test(void) { printf("******************************************************\n"); printf("uint16_t util_sat_subtract_16b(uint16_t x, uint16_t y)\n"); int test_res; int pass = 1; uint16_t inp_x; uint16_t inp_y; uint16_t exp_out; inp_x = 0; inp_y = 0; exp_out = 0; test_res = ut_util_sat_subtract_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 50; inp_y = 10; exp_out = 40; test_res = ut_util_sat_subtract_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 70; inp_y = 0; exp_out = 70; test_res = ut_util_sat_subtract_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 60; inp_y = 50; exp_out = 10; test_res = ut_util_sat_subtract_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 10; inp_y = 50; exp_out = 0; test_res = ut_util_sat_subtract_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 401; inp_y = 0x3FFF; exp_out = 0; test_res = ut_util_sat_subtract_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 0; inp_y = 0x7FFF; exp_out = 0; test_res = ut_util_sat_subtract_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; inp_x = 0; inp_y = 0xFFFF; exp_out = 0; test_res = ut_util_sat_subtract_16b(inp_x, inp_y, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_limit_u32b_to_u16b(uint32_t inp, uint16_t exp_out) { printf(" Input: %d\n", inp); uint16_t out = util_limit_u32b_to_u16b(inp); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_limit_u32b_to_u16b_test(void) { printf("******************************************************\n"); printf("uint16_t util_limit_u32b_to_u16b(uint32_t in)\n"); int test_res; int pass = 1; uint32_t inp; uint16_t exp_out; inp = 0; exp_out = 0; test_res = ut_util_limit_u32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 0x0000FFFE; exp_out = 0xFFFE; test_res = ut_util_limit_u32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 0x0000FFFF; exp_out = 0xFFFF; test_res = ut_util_limit_u32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 0x0001FFFF; exp_out = 0xFFFF; test_res = ut_util_limit_u32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 0x7FFFFFFF; exp_out = 0xFFFF; test_res = ut_util_limit_u32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 0xFFFFFFFF; exp_out = 0xFFFF; test_res = ut_util_limit_u32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_limit_s32b_to_u16b(int32_t inp, uint16_t exp_out) { printf(" Input: %d\n", inp); uint16_t out = util_limit_s32b_to_u16b(inp); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_limit_s32b_to_u16b_test(void) { printf("******************************************************\n"); printf("uint16_t util_limit_s32b_to_u16b(int32_t in)\n"); int test_res; int pass = 1; int32_t inp; uint16_t exp_out; inp = 0; exp_out = 0; test_res = ut_util_limit_s32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = -1; exp_out = 0; test_res = ut_util_limit_s32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = -32768; exp_out = 0; test_res = ut_util_limit_s32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = -2147483648; exp_out = 0; test_res = ut_util_limit_s32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 1; exp_out = 1; test_res = ut_util_limit_s32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 32767; exp_out = 32767; test_res = ut_util_limit_s32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 65535; exp_out = 0xFFFF; test_res = ut_util_limit_s32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 1000000000; exp_out = 0xFFFF; test_res = ut_util_limit_s32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; inp = 2147483647; exp_out = 0xFFFF; test_res = ut_util_limit_s32b_to_u16b(inp, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_convert_muldivoff(uint16_t raw, uint8_t mul, uint8_t div, int16_t offset, uint16_t exp_out) { printf(" Input: Raw:%d Mul:%d Div:%d Offset:%d\n", raw, mul, div, offset); uint16_t out = util_convert_muldivoff(raw, mul, div, offset); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_convert_muldivoff_test(void) { printf("******************************************************\n"); printf("uint16_t util_convert_muldivoff(uint16_t raw, uint8_t mul, uint8_t div, int16_t offset) \n"); int test_res; int pass = 1; uint16_t raw; uint8_t mul; uint8_t div; int16_t offset; uint16_t exp_out; // Normal case raw = 100; mul = 1; div = 1; offset = 100; exp_out = 200; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; // Normal case raw = 0; mul = 1; div = 1; offset = 0; exp_out = 0; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; // max raw raw = 0xFFFF; mul = 1; div = 1; offset = 0; exp_out = 0xFFFF; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; // Saturation + raw = 40000; mul = 1; div = 1; offset = 30000; exp_out = 0xFFFF; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; // Saturation - raw = 20000; mul = 1; div = 1; offset = -30000; exp_out = 0; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; // Multiplier raw = 10; mul = 30; div = 1; offset = 200; exp_out = 500; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; // Divider raw = 10; mul = 30; div = 6; offset = 200; exp_out = 250; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; // Zero mul raw = 10; mul = 0; div = 6; offset = 99; exp_out = 99; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; // Zero div raw = 10; mul = 2; div = 0; offset = 80; exp_out = 100; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; // Zero div raw = 0xFFFE; mul = 255; div = 255; offset = -1; exp_out = 0xFFFD; test_res = ut_util_convert_muldivoff(raw, mul, div, offset, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_sat_mul_kilo(uint16_t xk, uint16_t yk, uint16_t exp_out) { printf(" Input: X:%d Y:%d \n", xk, yk); uint16_t out = util_sat_mul_kilo(xk, yk); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_sat_mul_kilo_test(void) { printf("******************************************************\n"); printf("uint16_t util_sat_mul_kilo(uint16_t xk, uint16_t yk) \n"); int test_res; int pass = 1; uint16_t xk; uint16_t yk; uint16_t exp_out; // Normal case xk = 1000; yk = 1000; exp_out = 1000; test_res = ut_util_sat_mul_kilo(xk, yk, exp_out); if(!test_res) pass = 0; // Normal case xk = 60000; yk = 1; exp_out = 60; test_res = ut_util_sat_mul_kilo(xk, yk, exp_out); if(!test_res) pass = 0; // Normal case xk = 2; yk = 30000; exp_out = 60; test_res = ut_util_sat_mul_kilo(xk, yk, exp_out); if(!test_res) pass = 0; // Normal case xk = 0xFFFF; yk = 0xFFFF; exp_out = 0xFFFF; test_res = ut_util_sat_mul_kilo(xk, yk, exp_out); if(!test_res) pass = 0; // Normal case xk = 8095; yk = 8095; exp_out = 65529; test_res = ut_util_sat_mul_kilo(xk, yk, exp_out); if(!test_res) pass = 0; // Saturation xk = 10000; yk = 20000; exp_out = 0xFFFF; test_res = ut_util_sat_mul_kilo(xk, yk, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_sat_div_kilo(uint16_t top, uint16_t bot, uint16_t exp_out) { printf(" Input: Top:%d Bottom:%d \n", top, bot); uint16_t out = util_sat_div_kilo(top, bot); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_sat_div_kilo_test(void) { printf("******************************************************\n"); printf("uint16_t util_sat_div_kilo(uint16_t top, uint16_t bot) \n"); int test_res; int pass = 1; uint16_t top; uint16_t bot; uint16_t exp_out; // Normal case top = 1000; bot = 1000; exp_out = 1000; test_res = ut_util_sat_div_kilo(top, bot, exp_out); if(!test_res) pass = 0; // Normal case top = 12000; bot = 6000; exp_out = 2000; test_res = ut_util_sat_div_kilo(top, bot, exp_out); if(!test_res) pass = 0; // Saturation top = 40000; bot = 500; exp_out = 0xFFFF; test_res = ut_util_sat_div_kilo(top, bot, exp_out); if(!test_res) pass = 0; // Zero top = 40000; bot = 0; exp_out = 0xFFFF; test_res = ut_util_sat_div_kilo(top, bot, exp_out); if(!test_res) pass = 0; // Zero top = 0; bot = 2000; exp_out = 0; test_res = ut_util_sat_div_kilo(top, bot, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_sat_ratio_16b(uint16_t top, uint16_t bot, uint16_t exp_out) { printf(" Input: Top:%d Bottom:%d \n", top, bot); uint16_t out = util_sat_ratio_16b(top, bot); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_sat_ratio_16b_test(void) { printf("******************************************************\n"); printf("uint16_t util_sat_ratio_16b(uint16_t top, uint16_t bot) \n"); int test_res; int pass = 1; uint16_t top; uint16_t bot; uint16_t exp_out; // Normal case top = 1000; bot = 1000; exp_out = 0xFFFF; test_res = ut_util_sat_ratio_16b(top, bot, exp_out); if(!test_res) pass = 0; // Normal case top = 0xFFFF; bot = 0xFFFF; exp_out = 0xFFFF; test_res = ut_util_sat_ratio_16b(top, bot, exp_out); if(!test_res) pass = 0; // Normal case top = 6000; bot = 12000; exp_out = 0x7FFF; test_res = ut_util_sat_ratio_16b(top, bot, exp_out); if(!test_res) pass = 0; // Normal case top = 11000; bot = 44000; exp_out = 0x3FFF; test_res = ut_util_sat_ratio_16b(top, bot, exp_out); if(!test_res) pass = 0; // Zero top = 0; bot = 212; exp_out = 0; test_res = ut_util_sat_ratio_16b(top, bot, exp_out); if(!test_res) pass = 0; // Zero top = 158; bot = 0; exp_out = 0xFFFF; test_res = ut_util_sat_ratio_16b(top, bot, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_percent_to_16b(uint8_t percent, uint16_t exp_out) { printf(" Input: Percent:%d \n", percent); uint16_t out = util_percent_to_16b(percent); printf(" Output:%d\n", out); printf("Expected:%d\n", exp_out); if(out==exp_out) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_util_percent_to_16b_test(void) { printf("******************************************************\n"); printf("uint16_t util_percent_to_16b(uint8_t percent) \n"); int test_res; int pass = 1; uint8_t percent; uint16_t exp_out; // 0% percent = 0; exp_out = 0; test_res = ut_util_percent_to_16b(percent, exp_out); if(!test_res) pass = 0; // 25% percent = 25; exp_out = 16383; test_res = ut_util_percent_to_16b(percent, exp_out); if(!test_res) pass = 0; // 50% percent = 50; exp_out = 0x7FFF; test_res = ut_util_percent_to_16b(percent, exp_out); if(!test_res) pass = 0; // 75% percent = 75; exp_out = 49151; test_res = ut_util_percent_to_16b(percent, exp_out); if(!test_res) pass = 0; // 100% percent = 100; exp_out = 65535; test_res = ut_util_percent_to_16b(percent, exp_out); if(!test_res) pass = 0; // 200% percent = 200; exp_out = 0xFFFF; test_res = ut_util_percent_to_16b(percent, exp_out); if(!test_res) pass = 0; return pass; } static int ut_util_interpolate_1d_u16b(uint16_t x, uint16_t* x_axis, uint16_t* y_values, uint8_t len_axis, uint16_t exp_out) { printf(" Input: X:%d \n", x); printf("X values, Y values\n"); for(uint8_t i=0; i