#include "ut_fault.h" #include "..\..\src\hw\board\utils\faults.h" static int ut_fault_process(fault_t* fault, uint8_t w_trig, uint8_t f_trig, fault_cfg_t* cfg, uint8_t exp_out, fault_t* exp_out_fault, fault_cfg_t* exp_out_cfg) { printf("W-Trig:%d F-trig:%d \n", w_trig, f_trig); printf("Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time); printf("Delay:%d WtoF:%d \n", cfg->delay, cfg->wtof); uint8_t out = fault_process(fault, w_trig, f_trig, cfg); printf("Output:%d Expected:%d\n", out, exp_out); printf(" Output: Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time); printf("Expected: Severity:%d W-time:%d F-time:%d \n", exp_out_fault->severity, exp_out_fault->w_time, exp_out_fault->f_time); printf("Delay:%d WtoF:%d \n", cfg->delay, cfg->wtof); if((out==exp_out)&&(fault->severity==exp_out_fault->severity)&&(fault->w_time==exp_out_fault->w_time)&&(fault->f_time==exp_out_fault->f_time)&&(cfg->delay==exp_out_cfg->delay)&&(cfg->wtof==exp_out_cfg->wtof)) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_fault_process_test(void) { printf("******************************************************\n"); printf("uint8_t fault_process(fault_t* fault, uint8_t w_trig, uint8_t f_trig, fault_cfg_t* cfg)\n"); int test_res; int pass = 1; fault_t fault; uint8_t w_trig; uint8_t f_trig; fault_cfg_t cfg; uint8_t exp_out; fault_t exp_out_fault; fault_cfg_t exp_out_cfg; // NORMAL NO FAULT CONDITION ************************************************************************* // No change test, start form OK fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; w_trig = 0; f_trig = 0; cfg.delay = 0; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // STARTING CONDITIONS ************************************************************************* // Warning trigger test, start form OK fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; w_trig = 1; f_trig = 0; cfg.delay = 0; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Fault trigger test, start form OK fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; w_trig = 0; f_trig = 1; cfg.delay = 0; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Warning and Fault trigger test, start form OK fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; w_trig = 1; f_trig = 1; cfg.delay = 0; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Wrong start severity WARNING, with no triggers fault.severity = FAULT_LVL_WARNING; fault.w_time = 0; fault.f_time = 0; w_trig = 0; f_trig = 0; cfg.delay = 0; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Wrong start severity FAULT, with no triggers fault.severity = FAULT_LVL_FAULT; fault.w_time = 0; fault.f_time = 0; w_trig = 0; f_trig = 0; cfg.delay = 0; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Wrong start times, with no triggers fault.severity = FAULT_LVL_OK; fault.w_time = 78; fault.f_time = 56; w_trig = 0; f_trig = 0; cfg.delay = 0; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // TIME INCREASE TESTS - SECOND ITERATION WITH TRIGGER ACTIVE ************************************************************************* // Warning time increase with continuing warning condition fault.severity = FAULT_LVL_WARNING; fault.w_time = 45; fault.f_time = 0; w_trig = 1; f_trig = 0; cfg.delay = 0; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 46; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Fault and warning time increase with continuing fault only condition fault.severity = FAULT_LVL_FAULT; fault.w_time = 78; fault.f_time = 23; w_trig = 0; f_trig = 1; cfg.delay = 0; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 79; exp_out_fault.f_time = 24; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Fault and warning time increase with continuing both triggers condition fault.severity = FAULT_LVL_FAULT; fault.w_time = 57; fault.f_time = 12; w_trig = 1; f_trig = 1; cfg.delay = 0; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 58; exp_out_fault.f_time = 13; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Time increase and transition to fault with both triggers fault.severity = FAULT_LVL_WARNING; fault.w_time = 0; fault.f_time = 0; w_trig = 1; f_trig = 1; cfg.delay = 0; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 1; exp_out_fault.f_time = 1; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Warning time increase and transition to fault with only fault trigger fault.severity = FAULT_LVL_WARNING; fault.w_time = 0; fault.f_time = 0; w_trig = 0; f_trig = 1; cfg.delay = 0; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 1; exp_out_fault.f_time = 1; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Time saturation fault.severity = FAULT_LVL_FAULT; fault.w_time = 65535; fault.f_time = 65535; w_trig = 1; f_trig = 1; cfg.delay = 0; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 65535; exp_out_fault.f_time = 65535; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Fallback to warning and time increase fault.severity = FAULT_LVL_FAULT; fault.w_time = 784; fault.f_time = 457; w_trig = 1; f_trig = 0; cfg.delay = 0; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 785; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Fallback to OK and time reset from fault fault.severity = FAULT_LVL_FAULT; fault.w_time = 784; fault.f_time = 457; w_trig = 0; f_trig = 0; cfg.delay = 0; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Fallback to OK and time reset from warning fault.severity = FAULT_LVL_WARNING; fault.w_time = 479; fault.f_time = 0; w_trig = 0; f_trig = 0; cfg.delay = 0; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // FAULT DELAY TESTS ************************************************************************* // Not transition to fault fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; w_trig = 1; f_trig = 1; cfg.delay = 100; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Not transition to fault second time fault.severity = FAULT_LVL_WARNING; fault.w_time = 0; fault.f_time = 0; w_trig = 1; f_trig = 1; cfg.delay = 100; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 1; exp_out_fault.f_time = 1; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Not transition to fault before limit fault.severity = FAULT_LVL_WARNING; fault.w_time = 128; fault.f_time = 98; w_trig = 1; f_trig = 1; cfg.delay = 100; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 129; exp_out_fault.f_time = 99; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Transition to fault at limit fault.severity = FAULT_LVL_WARNING; fault.w_time = 358; fault.f_time = 99; w_trig = 1; f_trig = 1; cfg.delay = 100; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 359; exp_out_fault.f_time = 100; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Transition to fault after limit fault.severity = FAULT_LVL_WARNING; fault.w_time = 786; fault.f_time = 100; w_trig = 1; f_trig = 1; cfg.delay = 100; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 787; exp_out_fault.f_time = 101; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Continued fault condition fault.severity = FAULT_LVL_FAULT; fault.w_time = 101; fault.f_time = 101; w_trig = 1; f_trig = 1; cfg.delay = 100; cfg.wtof = 0; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 102; exp_out_fault.f_time = 102; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Fallback to warning fault.severity = FAULT_LVL_FAULT; fault.w_time = 101; fault.f_time = 101; w_trig = 1; f_trig = 0; cfg.delay = 100; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 102; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Fallback to OK fault.severity = FAULT_LVL_FAULT; fault.w_time = 101; fault.f_time = 101; w_trig = 0; f_trig = 0; cfg.delay = 100; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Allready was fault condition, with lower time - fixes to correct state fault.severity = FAULT_LVL_FAULT; fault.w_time = 45; fault.f_time = 45; w_trig = 1; f_trig = 1; cfg.delay = 100; cfg.wtof = 0; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 46; exp_out_fault.f_time = 46; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // WARNING TO FAULT TRANSITION TESTS ************************************************************************* // Not transition to fault fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; w_trig = 1; f_trig = 0; cfg.delay = 0; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Not transition to fault fault.severity = FAULT_LVL_WARNING; fault.w_time = 0; fault.f_time = 0; w_trig = 1; f_trig = 0; cfg.delay = 0; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 1; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Not transition to fault before limit fault.severity = FAULT_LVL_WARNING; fault.w_time = 198; fault.f_time = 0; w_trig = 1; f_trig = 0; cfg.delay = 0; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 199; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Not Transition to fault at limit fault.severity = FAULT_LVL_WARNING; fault.w_time = 199; fault.f_time = 0; w_trig = 1; f_trig = 0; cfg.delay = 0; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 200; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Transition to fault after limit fault.severity = FAULT_LVL_WARNING; fault.w_time = 200; fault.f_time = 0; w_trig = 1; f_trig = 0; cfg.delay = 0; cfg.wtof = 200; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 201; exp_out_fault.f_time = 1; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Continued fault fault.severity = FAULT_LVL_FAULT; fault.w_time = 201; fault.f_time = 1; w_trig = 1; f_trig = 0; cfg.delay = 0; cfg.wtof = 200; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 202; exp_out_fault.f_time = 2; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Fallback to ok fault.severity = FAULT_LVL_FAULT; fault.w_time = 247; fault.f_time = 0; w_trig = 0; f_trig = 0; cfg.delay = 0; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // WARNING TO FAULT TRANSITION WITH FAULT DELAY TESTS ************************************************************************* // Not transition to fault fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; w_trig = 1; f_trig = 0; cfg.delay = 50; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Not transition to fault fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; w_trig = 1; f_trig = 1; cfg.delay = 50; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; w_trig = 0; f_trig = 1; cfg.delay = 50; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Transition to fault at delay fault.severity = FAULT_LVL_WARNING; fault.w_time = 49; fault.f_time = 49; w_trig = 1; f_trig = 1; cfg.delay = 50; cfg.wtof = 200; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 50; exp_out_fault.f_time = 50; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // No Transition to fault at wtof fault.severity = FAULT_LVL_WARNING; fault.w_time = 200; fault.f_time = 0; w_trig = 1; f_trig = 0; cfg.delay = 50; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 201; exp_out_fault.f_time = 1; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // No Transition to fault before wtof + delay fault.severity = FAULT_LVL_WARNING; fault.w_time = 248; fault.f_time = 48; w_trig = 1; f_trig = 0; cfg.delay = 50; cfg.wtof = 200; exp_out = 0; exp_out_fault.severity = FAULT_LVL_WARNING; exp_out_fault.w_time = 249; exp_out_fault.f_time = 49; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Transition to fault before wtof + delay fault.severity = FAULT_LVL_WARNING; fault.w_time = 249; fault.f_time = 49; w_trig = 1; f_trig = 0; cfg.delay = 50; cfg.wtof = 200; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 250; exp_out_fault.f_time = 50; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Continued wtof fault condition fault.severity = FAULT_LVL_FAULT; fault.w_time = 250; fault.f_time = 50; w_trig = 1; f_trig = 0; cfg.delay = 50; cfg.wtof = 200; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 251; exp_out_fault.f_time = 51; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; // Continued wtof fault condition, without warning trigger fault.severity = FAULT_LVL_FAULT; fault.w_time = 350; fault.f_time = 150; w_trig = 0; f_trig = 1; cfg.delay = 50; cfg.wtof = 200; exp_out = 1; exp_out_fault.severity = FAULT_LVL_FAULT; exp_out_fault.w_time = 351; exp_out_fault.f_time = 151; exp_out_cfg.delay = cfg.delay; exp_out_cfg.wtof = cfg.wtof; test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg); if(!test_res) pass = 0; return pass; } static int ut_fault_is_active(fault_t* fault, uint8_t exp_out, fault_t* exp_out_fault) { printf("Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time); uint8_t out = fault_is_active(fault); printf("Output:%d Expected:%d\n", out, exp_out); printf(" Output: Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time); printf("Expected: Severity:%d W-time:%d F-time:%d \n", exp_out_fault->severity, exp_out_fault->w_time, exp_out_fault->f_time); if((out==exp_out)&&(fault->severity==exp_out_fault->severity)&&(fault->w_time==exp_out_fault->w_time)&&(fault->f_time==exp_out_fault->f_time)) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_fault_is_active_test(void) { printf("******************************************************\n"); printf("uint8_t fault_is_active(fault_t* fault)\n"); int test_res; int pass = 1; fault_t fault; uint8_t exp_out; fault_t exp_out_fault; fault.severity = FAULT_LVL_OK; fault.w_time = 500; fault.f_time = 300; exp_out = 0; exp_out_fault.severity = fault.severity; exp_out_fault.w_time = fault.w_time; exp_out_fault.f_time = fault.f_time; test_res = ut_fault_is_active(&fault, exp_out, &exp_out_fault); if(!test_res) pass = 0; fault.severity = FAULT_LVL_WARNING; fault.w_time = 500; fault.f_time = 300; exp_out = 0; exp_out_fault.severity = fault.severity; exp_out_fault.w_time = fault.w_time; exp_out_fault.f_time = fault.f_time; test_res = ut_fault_is_active(&fault, exp_out, &exp_out_fault); if(!test_res) pass = 0; fault.severity = FAULT_LVL_FAULT; fault.w_time = 500; fault.f_time = 300; exp_out = 1; exp_out_fault.severity = fault.severity; exp_out_fault.w_time = fault.w_time; exp_out_fault.f_time = fault.f_time; test_res = ut_fault_is_active(&fault, exp_out, &exp_out_fault); if(!test_res) pass = 0; return pass; } static int ut_fault_is_warning(fault_t* fault, uint8_t exp_out, fault_t* exp_out_fault) { printf("Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time); uint8_t out = fault_is_warning(fault); printf("Output:%d Expected:%d\n", out, exp_out); printf(" Output: Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time); printf("Expected: Severity:%d W-time:%d F-time:%d \n", exp_out_fault->severity, exp_out_fault->w_time, exp_out_fault->f_time); if((out==exp_out)&&(fault->severity==exp_out_fault->severity)&&(fault->w_time==exp_out_fault->w_time)&&(fault->f_time==exp_out_fault->f_time)) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_fault_is_warning_test(void) { printf("******************************************************\n"); printf("uint8_t fault_is_warning(fault_t* fault)\n"); int test_res; int pass = 1; fault_t fault; uint8_t exp_out; fault_t exp_out_fault; fault.severity = FAULT_LVL_OK; fault.w_time = 500; fault.f_time = 300; exp_out = 0; exp_out_fault.severity = fault.severity; exp_out_fault.w_time = fault.w_time; exp_out_fault.f_time = fault.f_time; test_res = ut_fault_is_warning(&fault, exp_out, &exp_out_fault); if(!test_res) pass = 0; fault.severity = FAULT_LVL_WARNING; fault.w_time = 500; fault.f_time = 300; exp_out = 1; exp_out_fault.severity = fault.severity; exp_out_fault.w_time = fault.w_time; exp_out_fault.f_time = fault.f_time; test_res = ut_fault_is_warning(&fault, exp_out, &exp_out_fault); if(!test_res) pass = 0; fault.severity = FAULT_LVL_FAULT; fault.w_time = 500; fault.f_time = 300; exp_out = 1; exp_out_fault.severity = fault.severity; exp_out_fault.w_time = fault.w_time; exp_out_fault.f_time = fault.f_time; test_res = ut_fault_is_warning(&fault, exp_out, &exp_out_fault); if(!test_res) pass = 0; return pass; } static int ut_fault_reset(fault_t* fault, fault_t* exp_out_fault) { printf("Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time); fault_reset(fault); printf(" Output: Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time); printf("Expected: Severity:%d W-time:%d F-time:%d \n", exp_out_fault->severity, exp_out_fault->w_time, exp_out_fault->f_time); if((fault->severity==exp_out_fault->severity)&&(fault->w_time==exp_out_fault->w_time)&&(fault->f_time==exp_out_fault->f_time)) { printf("PASS\n\n"); return 1; } else { printf("FAIL\n\n"); return 0; } } int ut_fault_reset_test(void) { printf("******************************************************\n"); printf("void fault_reset(fault_t* fault)\n"); int test_res; int pass = 1; fault_t fault; fault_t exp_out_fault; fault.severity = FAULT_LVL_OK; fault.w_time = 0; fault.f_time = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; test_res = ut_fault_reset(&fault, &exp_out_fault); if(!test_res) pass = 0; fault.severity = FAULT_LVL_WARNING; fault.w_time = 500; fault.f_time = 0; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; test_res = ut_fault_reset(&fault, &exp_out_fault); if(!test_res) pass = 0; fault.severity = FAULT_LVL_FAULT; fault.w_time = 1000; fault.f_time = 500; exp_out_fault.severity = FAULT_LVL_OK; exp_out_fault.w_time = 0; exp_out_fault.f_time = 0; test_res = ut_fault_reset(&fault, &exp_out_fault); if(!test_res) pass = 0; return pass; }