From d387da80e64de32944910d14e15419af46694d8d Mon Sep 17 00:00:00 2001 From: skarg Date: Wed, 14 Feb 2007 17:31:02 +0000 Subject: [PATCH] adding unit test for load control state machine. --- bacnet-stack/demo/object/lc.c | 65 +++++++++++++++++++++++--------- bacnet-stack/demo/object/lc.ide | Bin 34682 -> 35568 bytes 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/bacnet-stack/demo/object/lc.c b/bacnet-stack/demo/object/lc.c index 15424074..60522fac 100644 --- a/bacnet-stack/demo/object/lc.c +++ b/bacnet-stack/demo/object/lc.c @@ -360,10 +360,10 @@ typedef enum load_control_state { SHED_NON_COMPLIANT, SHED_COMPLIANT } LOAD_CONTROL_STATE; +static LOAD_CONTROL_STATE Load_Control_State[MAX_LOAD_CONTROLS]; void Load_Control_State_Machine(int object_index) { - static LOAD_CONTROL_STATE state[MAX_LOAD_CONTROLS]; static bool initialized = false; unsigned i = 0; /* loop counter */ int diff = 0; /* used for datetime comparison */ @@ -371,36 +371,36 @@ void Load_Control_State_Machine(int object_index) if (!initialized) { initialized = true; for (i = 0; i < MAX_LOAD_CONTROLS; i++) { - state[i] = SHED_INACTIVE; + Load_Control_State[i] = SHED_INACTIVE; } } - switch (state[object_index]) { + switch (Load_Control_State[object_index]) { case SHED_REQUEST_PENDING: /* request to cancel using default values? */ switch (Requested_Shed_Level[object_index].type) { case BACNET_SHED_TYPE_PERCENT: if (Requested_Shed_Level[object_index].value.percent == DEFAULT_VALUE_PERCENT) - state[object_index] = SHED_INACTIVE; + Load_Control_State[object_index] = SHED_INACTIVE; break; case BACNET_SHED_TYPE_AMOUNT: if (Requested_Shed_Level[object_index].value.amount == DEFAULT_VALUE_AMOUNT) - state[object_index] = SHED_INACTIVE; + Load_Control_State[object_index] = SHED_INACTIVE; break; case BACNET_SHED_TYPE_LEVEL: default: if (Requested_Shed_Level[object_index].value.level == DEFAULT_VALUE_LEVEL) - state[object_index] = SHED_INACTIVE; + Load_Control_State[object_index] = SHED_INACTIVE; break; } - if (state[object_index] == SHED_INACTIVE) + if (Load_Control_State[object_index] == SHED_INACTIVE) break; /* request to cancel using wildcards in start time? */ if (datetime_wildcard(&Start_Time[object_index])) { - state[object_index] = SHED_INACTIVE; + Load_Control_State[object_index] = SHED_INACTIVE; break; } /* cancel because current time is after start time + duration? */ @@ -412,7 +412,7 @@ void Load_Control_State_Machine(int object_index) if (diff < 0) { /* CancelShed */ /* FIXME: stop shedding! i.e. relinquish */ - state[object_index] = SHED_INACTIVE; + Load_Control_State[object_index] = SHED_INACTIVE; break; } diff = datetime_compare(&Current_Time, &Start_Time[object_index]); @@ -437,7 +437,7 @@ void Load_Control_State_Machine(int object_index) Shed_Level_Copy( &Actual_Shed_Level[object_index], &Requested_Shed_Level[object_index]); - state[object_index] = SHED_COMPLIANT; + Load_Control_State[object_index] = SHED_COMPLIANT; } else { /* CannotMeetShed */ Shed_Level_Default_Set( @@ -446,7 +446,7 @@ void Load_Control_State_Machine(int object_index) Shed_Level_Default_Set( &Actual_Shed_Level[object_index], Requested_Shed_Level[object_index].type); - state[object_index] = SHED_NON_COMPLIANT; + Load_Control_State[object_index] = SHED_NON_COMPLIANT; } } break; @@ -458,7 +458,7 @@ void Load_Control_State_Machine(int object_index) diff = datetime_compare(&End_Time[object_index], &Current_Time); if (diff < 0) { /* FinishedUnsuccessfulShed */ - state[object_index] = SHED_INACTIVE; + Load_Control_State[object_index] = SHED_INACTIVE; break; } if (Load_Control_Request_Written[object_index] || @@ -466,7 +466,7 @@ void Load_Control_State_Machine(int object_index) /* UnsuccessfulShedReconfigured */ Load_Control_Request_Written[object_index] = false; Start_Time_Property_Written[object_index] = false; - state[object_index] = SHED_REQUEST_PENDING; + Load_Control_State[object_index] = SHED_REQUEST_PENDING; break; } if (Able_To_Meet_Shed_Request(object_index)) { @@ -479,7 +479,7 @@ void Load_Control_State_Machine(int object_index) Shed_Level_Copy( &Actual_Shed_Level[object_index], &Requested_Shed_Level[object_index]); - state[object_index] = SHED_COMPLIANT; + Load_Control_State[object_index] = SHED_COMPLIANT; } break; case SHED_COMPLIANT: @@ -491,7 +491,7 @@ void Load_Control_State_Machine(int object_index) if (diff < 0) { /* FinishedSuccessfulShed */ datetime_wildcard_set(&Start_Time[i]); - state[object_index] = SHED_INACTIVE; + Load_Control_State[object_index] = SHED_INACTIVE; break; } if (Load_Control_Request_Written[object_index] || @@ -499,7 +499,7 @@ void Load_Control_State_Machine(int object_index) /* UnsuccessfulShedReconfigured */ Load_Control_Request_Written[object_index] = false; Start_Time_Property_Written[object_index] = false; - state[object_index] = SHED_REQUEST_PENDING; + Load_Control_State[object_index] = SHED_REQUEST_PENDING; break; } if (!Able_To_Meet_Shed_Request(object_index)) { @@ -510,7 +510,7 @@ void Load_Control_State_Machine(int object_index) Shed_Level_Default_Set( &Actual_Shed_Level[object_index], Requested_Shed_Level[object_index].type); - state[object_index] = SHED_NON_COMPLIANT; + Load_Control_State[object_index] = SHED_NON_COMPLIANT; } break; case SHED_INACTIVE: @@ -523,7 +523,7 @@ void Load_Control_State_Machine(int object_index) Shed_Level_Default_Set( &Actual_Shed_Level[object_index], Requested_Shed_Level[object_index].type); - state[object_index] = SHED_REQUEST_PENDING; + Load_Control_State[object_index] = SHED_REQUEST_PENDING; } break; } @@ -536,6 +536,7 @@ void Load_Control_State_Machine_Handler(void) { unsigned i = 0; + Load_Control_Init(); for (i = 0; i < MAX_LOAD_CONTROLS; i++) { Load_Control_State_Machine(i); } @@ -898,6 +899,32 @@ bool Load_Control_Write_Property(BACNET_WRITE_PROPERTY_DATA * wp_data, #include #include #include "ctest.h" + +void testLoadControlStateMachine(Test * pTest) +{ + unsigned i = 0, j = 0; + Load_Control_Init(); + BACNET_APPLICATION_DATA_VALUE value; + BACNET_ERROR_CLASS error_class; + BACNET_ERROR_CODE error_code; + bool status = false; + BACNET_WRITE_PROPERTY_DATA wp_data; + + /* validate the triggers for each state change */ + for (j = 0; j < 20; j++) { + Load_Control_State_Machine_Handler(); + for (i = 0; i < MAX_LOAD_CONTROLS; i++) { + ct_test(pTest, Load_Control_State[i] == SHED_INACTIVE); + } + } + + /**/ + status = Load_Control_Write_Property(&wp_data, &error_class, &error_code); + + + + +} void testLoadControl(Test * pTest) { @@ -936,6 +963,8 @@ int main(void) pTest = ct_create("BACnet Load Control", NULL); /* individual tests */ rc = ct_addTestFunction(pTest, testLoadControl); + assert(rc); + rc = ct_addTestFunction(pTest, testLoadControlStateMachine); assert(rc); ct_setStream(pTest, stdout); diff --git a/bacnet-stack/demo/object/lc.ide b/bacnet-stack/demo/object/lc.ide index d5f5fbcf7c2dfa7558c1ab0ea94579345f550b09..682eafcb4bf32957444cbba34e713c2dfa6acbb5 100644 GIT binary patch delta 6679 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 delta 5953 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