Diff of /tags/v1.0.0.0/CfUnitVerifier.project.md [000000] .. [r192]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/tags/v1.0.0.0/CfUnitVerifier.project.md
@@ -0,0 +1,4697 @@
+---
+
+                     This testsuite tests the function block FB_AdjustAssertFailureMessageToMax255CharLength_Test
+   The total printed message can not be more than 252 characters long.
+
+
+~~~ST
+FUNCTION_BLOCK FB_AdjustAssertFailureMessageToMax252CharLengthTest EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+TestInstancePath252CharsExpectTooLongTestInstancePath();
+TestInstancePath220CharsExpectShortenedTestInstancePath();
+TestInstancePath255CharsExpectTooLongTestInstancePath();
+~~~
+---
+~~~ST
+METHOD TestInstancePath220CharsExpectShortenedTestInstancePath: 
+VAR
+    AdjustAssertFailureMessageToMax252CharLength: FB_AdjustAssertFailureMessageToMax252CharLength;
+    TestInstancePathNameWith220Chars: T_MaxString;
+    TooLongTestMessage60Chars: T_MaxString;
+    TestMessageResultExpected: T_MaxString;
+    TestInstancePathResult: T_MaxString;
+    TestMessageResult: T_MaxString;
+END_VAR
+
+~~~
+~~~ST
+TEST('TestInstancePath220CharsExpectShortenedTestInstancePath');
+
+AdjustAssertFailureMessageToMax252CharLength(MsgFmtString := TestInstancePathNameWith220Chars,
+                                             StringArg := TooLongTestMessage60Chars,
+                                             MsgFmtStringProcessed => TestInstancePathResult,
+                                             StringArgProcessed => TestMessageResult);
+
+
+AssertEquals_STRING(Expected := TestInstancePathNameWith220Chars, // Same test instance path should be expected as the one going in
+                    Actual := TestInstancePathResult,
+                    'Test instance path not correct');
+
+AssertEquals_STRING(Expected := TestMessageResultExpected,
+                    Actual := TestMessageResult,
+                    'Test message not correct');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD TestInstancePath252CharsExpectTooLongTestInstancePath: 
+VAR
+    AdjustAssertFailureMessageToMax252CharLength: FB_AdjustAssertFailureMessageToMax252CharLength;
+    TestInstancePathNameWith252Chars: T_MaxString;
+    ShortTestMessage: T_MaxString;
+    TestInstancePathNameWith252CharsExpectedResult: T_MaxString;
+    ShortTestMessageExpectedResult: T_MaxString;
+    TestInstancePathNameWith252CharsResult: T_MaxString;
+    ShortTestMessageResult: T_MaxString;
+END_VAR
+
+~~~
+~~~ST
+TEST('TestInstancePath252CharsExpectTooLongTestInstancePath');
+
+AdjustAssertFailureMessageToMax252CharLength(MsgFmtString := TestInstancePathNameWith252Chars,
+                                             StringArg := ShortTestMessage,
+                                             MsgFmtStringProcessed => TestInstancePathNameWith252CharsResult,
+                                             StringArgProcessed => ShortTestMessageResult);
+
+AssertEquals_STRING(Expected := TestInstancePathNameWith252CharsExpectedResult,
+                    Actual := TestInstancePathNameWith252CharsResult,
+                    'Test instance path not correct');
+
+AssertEquals_STRING(Expected := ShortTestMessageExpectedResult,
+                    Actual := ShortTestMessageResult,
+                    'Test message not correct');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD TestInstancePath255CharsExpectTooLongTestInstancePath: 
+VAR
+    AdjustAssertFailureMessageToMax252CharLength: FB_AdjustAssertFailureMessageToMax252CharLength;
+    TestInstancePathNameWith255Chars: T_MaxString;
+    ShortTestMessage: T_MaxString;
+    TestInstancePathNameWith252CharsExpectedResult: T_MaxString;
+    ShortTestMessageExpectedResult: T_MaxString;
+    TestInstancePathNameWith252CharsResult: T_MaxString;
+    ShortTestMessageResult: T_MaxString;
+END_VAR
+
+~~~
+~~~ST
+TEST('TestInstancePath255CharsExpectTooLongTestInstancePath');
+
+AdjustAssertFailureMessageToMax252CharLength(MsgFmtString := TestInstancePathNameWith255Chars,
+                                             StringArg := ShortTestMessage,
+                                             MsgFmtStringProcessed => TestInstancePathNameWith252CharsResult,
+                                             StringArgProcessed => ShortTestMessageResult);
+
+AssertEquals_STRING(Expected := TestInstancePathNameWith252CharsExpectedResult,
+                    Actual := TestInstancePathNameWith252CharsResult,
+                    'Test instance path not correct');
+
+AssertEquals_STRING(Expected := ShortTestMessageExpectedResult,
+                    Actual := ShortTestMessageResult,
+                    'Test message not correct');
+
+TEST_FINISHED();
+~~~
+---
+
+                    
+    This testsuite tests the different assert-functions for all the primitive data types in TwinCAT, but using the
+    ANY-version of the Assert-method.
+    For every data type at least two different tests have been defined:
+        1. One test that succeeds (Expected and actual are equal)
+        2. One test that fails (Expected and actual are false).
+    For every failing test the printed value should be the same as if we were using the primitive data type assert
+    directly. 
+
+
+~~~ST
+FUNCTION_BLOCK FB_AnyPrimitiveTypes EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+Test_ANY_BYTE_Equals();
+Test_ANY_BYTE_Differ();
+Test_ANY_BOOL_Equals();
+Test_ANY_BOOL_Differ();
+Test_ANY_DATE_Equals();
+Test_ANY_DATE_Differ();
+Test_ANY_DATE_AND_TIME_Equals();
+Test_ANY_DATE_AND_TIME_Differ();
+Test_ANY_DINT_Equals();
+Test_ANY_DINT_Differ();
+Test_ANY_DWORD_Equals();
+Test_ANY_DWORD_Differ();
+Test_ANY_INT_Equals();
+Test_ANY_INT_Differ();
+Test_ANY_LINT_Equals();
+Test_ANY_LINT_Differ();
+Test_ANY_LREAL_Equals();
+Test_ANY_LREAL_Differ();
+Test_ANY_LTIME_Equals();
+Test_ANY_LTIME_Differ();
+Test_ANY_LWORD_Equals();
+Test_ANY_LWORD_Differ();
+Test_ANY_REAL_Equals();
+Test_ANY_REAL_Differ();
+Test_ANY_SINT_Equals();
+Test_ANY_SINT_Differ();
+Test_ANY_STRING_Equals();
+Test_ANY_STRING_Differ();
+Test_ANY_TIME_Equals();
+Test_ANY_TIME_Differ();
+Test_ANY_TIME_OF_DAY_Equals();
+TesT_ANY_TIME_OF_DAY_Differ();
+Test_ANY_UDINT_Equals();
+Test_ANY_UDINT_Differ();
+Test_ANY_UINT_Equals();
+Test_ANY_UINT_Differ();
+Test_ANY_ULINT_Equals();
+Test_ANY_ULINT_Differ();
+Test_ANY_USINT_Equals();
+Test_ANY_USINT_Differ();
+Test_ANY_WORD_Equals();
+Test_ANY_WORD_Differ();
+~~~
+---
+~~~ST
+METHOD Test_ANY_BOOL_Differ: 
+VAR
+    a: BOOL;
+    b: BOOL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_BOOL_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_BOOL_Equals: 
+VAR
+    a: BOOL;
+    b: BOOL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_BOOL_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_BYTE_Differ: 
+VAR
+    a: BYTE;
+    b: BYTE;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_BYTE_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_BYTE_Equals: 
+VAR
+    a: BYTE;
+    b: BYTE;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_BYTE_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_DATE_AND_TIME_Differ: 
+VAR
+    a: DT;
+    b: DT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_DATE_AND_TIME_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_DATE_AND_TIME_Equals: 
+VAR
+    a: DT;
+    b: DT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_DATE_AND_TIME_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_DATE_Differ: 
+VAR
+    a: DATE;
+    b: DATE;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_DATE_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_DATE_Equals: 
+VAR
+    a: DATE;
+    b: DATE;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_DATE_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_DINT_Differ: 
+VAR
+    a: DINT;
+    b: DINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_DINT_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_DINT_Equals: 
+VAR
+    a: DINT;
+    b: DINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_DINT_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_DWORD_Differ: 
+VAR
+    a: DWORD;
+    b: DWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_DWORD_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_DWORD_Equals: 
+VAR
+    a: DWORD;
+    b: DWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_DWORD_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_INT_Differ: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_INT_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_INT_Equals: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_INT_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_LINT_Differ: 
+VAR
+    a: LINT;
+    b: LINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_LINT_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_LINT_Equals: 
+VAR
+    a: LINT;
+    b: LINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_LINT_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_LREAL_Differ: 
+VAR
+    a: LREAL;
+    b: LREAL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_LREAL_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_LREAL_Equals: 
+VAR
+    a: LREAL;
+    b: LREAL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_LREAL_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_LTIME_Differ: 
+VAR
+    a: LTIME;
+    b: LTIME;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_LTIME_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_LTIME_Equals: 
+VAR
+    a: LTIME;
+    b: LTIME;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_LTIME_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_LWORD_Differ: 
+VAR
+    a: LWORD;
+    b: LWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_LWORD_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_LWORD_Equals: 
+VAR
+    a: LWORD;
+    b: LWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_LWORD_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_REAL_Differ: 
+VAR
+    a: REAL;
+    b: REAL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_REAL_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_REAL_Equals: 
+VAR
+    a: REAL;
+    b: REAL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_REAL_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_SINT_Differ: 
+VAR
+    a: SINT;
+    b: SINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_SINT_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_SINT_Equals: 
+VAR
+    a: SINT;
+    b: SINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_SINT_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_STRING_Differ: 
+VAR
+    a: string;
+    b: string;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_STRING_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_STRING_Equals: 
+VAR
+    a: string;
+    b: string;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_STRING_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_TIME_Differ: 
+VAR
+    a: TIME;
+    b: TIME;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_TIME_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_TIME_Equals: 
+VAR
+    a: TIME;
+    b: TIME;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_TIME_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_TIME_OF_DAY_Differ: 
+VAR
+    a: TOD;
+    b: TOD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_TIME_OF_DAY_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_TIME_OF_DAY_Equals: 
+VAR
+    a: TOD;
+    b: TOD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_TIME_OF_DAY_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_UDINT_Differ: 
+VAR
+    a: UDINT;
+    b: UDINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_UDINT_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_UDINT_Equals: 
+VAR
+    a: UDINT;
+    b: UDINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_UDINT_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_UINT_Differ: 
+VAR
+    a: UINT;
+    b: UINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_UINT_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_UINT_Equals: 
+VAR
+    a: UINT;
+    b: UINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_UINT_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_ULINT_Differ: 
+VAR
+    a: ULINT;
+    b: ULINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_ULINT_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_ULINT_Equals: 
+VAR
+    a: ULINT;
+    b: ULINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_ULINT_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_USINT_Differ: 
+VAR
+    a: USINT;
+    b: USINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_USINT_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_USINT_Equals: 
+VAR
+    a: USINT;
+    b: USINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_USINT_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_WORD_Differ: 
+VAR
+    a: WORD;
+    b: WORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_WORD_Differ');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_WORD_Equals: 
+VAR
+    a: WORD;
+    b: WORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_WORD_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+
+                    
+    Tests the free function F_AnyToUnionValue.
+
+
+~~~ST
+FUNCTION_BLOCK FB_AnyToUnionValue EXTENDS CfUnit.FB_TestSuite
+VAR
+    aBit: BIT;
+END_VAR
+
+~~~
+~~~ST
+Test_BOOL();
+Test_BIT();
+Test_BYTE();
+Test_WORD();
+Test_DWORD();
+Test_LWORD();
+Test_SINT();
+Test_INT();
+Test_DINT();
+Test_LINT();
+Test_USINT();
+Test_UINT();
+Test_UDINT();
+Test_ULINT();
+Test_REAL();
+Test_LREAL();
+Test_STRING();
+Test_STRING_2();
+Test_WSTRING();
+Test_TIME();
+Test_DATE();
+Test_DATE_AND_TIME();
+Test_TIME_OF_DAY();
+Test_LTIME();
+~~~
+---
+~~~ST
+METHOD Test_BIT: 
+VAR
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BIT');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := aBit);
+
+AssertEquals(Expected := aBit,
+             Actual := result.bitExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BOOL: 
+VAR
+    a: BOOL;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BOOL');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.boolExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BYTE: 
+VAR
+    a: BYTE;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BYTE');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.byteExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DATE: 
+VAR
+    a: DATE;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DATE');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.dateExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DATE_AND_TIME: 
+VAR
+    a: DT;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DATE_AND_TIME');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.dateandtimeExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DINT: 
+VAR
+    a: DINT;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DINT');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.dintExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DWORD: 
+VAR
+    a: DWORD;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DWORD');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.dwordExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_INT: 
+VAR
+    a: INT;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_INT');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.intExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LINT: 
+VAR
+    a: LINT;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LINT');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.lintExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL: 
+VAR
+    a: LREAL;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.lrealExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LTIME: 
+VAR
+    a: LTIME;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LTIME');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.ltimeExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LWORD: 
+VAR
+    a: LWORD;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LWORD');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.lwordExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL: 
+VAR
+    a: REAL;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.realExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_SINT: 
+VAR
+    a: SINT;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_SINT');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.sintExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_STRING: 
+VAR
+    a: string;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_STRING');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.stringExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_STRING_2: 
+VAR
+    a: T_MaxString;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_STRING_2');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.stringExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_TIME: 
+VAR
+    a: TIME;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_TIME');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.timeExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_TIME_OF_DAY: 
+VAR
+    a: TOD;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_TIME_OF_DAY');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.timeofdayExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UDINT: 
+VAR
+    a: UDINT;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UDINT');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.udintExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UINT: 
+VAR
+    a: UINT;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UINT');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.uintExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ULINT: 
+VAR
+    a: ULINT;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('TEST_ULINT');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.ulintExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_USINT: 
+VAR
+    a: USINT;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_USINT');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.usintExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WORD: 
+VAR
+    a: WORD;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WORD');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.wordExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WSTRING: 
+VAR
+    a: wstring;
+    result: U_ExpectedOrActual;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WSTRING');
+
+result := CfUnit.F_AnyToUnionValue(AnyValue := a);
+
+AssertEquals(Expected := a,
+             Actual := result.wstringExpectedOrActual,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+
+                    
+    This testsuite tests the different assert-functions for all the different type of arrays (varying by the different
+    data types that are available in TwinCAT). For every type of array (BOOL, BYTE, INT etc.) at least three different
+    tests have been defined:
+        1. One test that succeeds, where the data and size of the arrays are matching
+        2. One test that fails, where the size of the arrays differs
+        3. One test that fails, where the content of the array differs
+
+
+~~~ST
+FUNCTION_BLOCK FB_ArrayPrimitiveTypes EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+Test_BOOL_Array_Equals();
+Test_BOOL_Array_DifferInSize();
+Test_BOOL_Array_DifferInContent();
+Test_BYTE_Array_Equals();
+Test_BYTE_Array_DifferInSize();
+Test_BYTE_Array_DifferInContent();
+Test_DINT_Array_Equals();
+Test_DINT_Array_DifferInSize();
+Test_DINT_Array_DifferInContent();
+Test_DWORD_Array_Equals();
+Test_DWORD_Array_DifferInSize();
+Test_DWORD_Array_DifferInContent();
+Test_INT_Array_Equals();
+Test_INT_Array_DifferInSize();
+Test_INT_Array_DifferInContent();
+Test_LINT_Array_Equals();
+Test_LINT_Array_DifferInSize();
+Test_LINT_Array_DifferInContent();
+Test_LREAL_Array_Equals();
+Test_LREAL_Array_DifferInSize();
+Test_LREAL_Array_DifferInContent();
+Test_LREAL_Array2d_Equals();
+Test_LREAL_Array2d_DifferInSize();
+Test_LREAL_Array2d_DifferInContent();
+Test_LREAL_Array3d_Equals();
+Test_LREAL_Array3d_DifferInSize();
+Test_LREAL_Array3d_DifferInContent();
+Test_LWORD_Array_Equals();
+Test_LWORD_Array_DifferInSize();
+Test_LWORD_Array_DifferInContent();
+Test_REAL_Array_Equals();
+Test_REAL_Array_DifferInSize();
+Test_REAL_Array_DifferInContent();
+Test_REAL_Array2d_Equals();
+Test_REAL_Array2d_DifferInSize();
+Test_REAL_Array2d_DifferInContent();
+Test_REAL_Array3d_Equals();
+Test_REAL_Array3d_DifferInSize();
+Test_REAL_Array3d_DifferInContent();
+Test_SINT_Array_Equals();
+Test_SINT_Array_DifferInSize();
+Test_SINT_Array_DifferInContent();
+Test_UDINT_Array_Equals();
+Test_UDINT_Array_DifferInSize();
+Test_UDINT_Array_DifferInContent();
+Test_UINT_Array_Equals();
+Test_UINT_Array_DifferInSize();
+Test_UINT_Array_DifferInContent();
+Test_ULINT_Array_Equals();
+Test_ULINT_Array_DifferInSize();
+Test_ULINT_Array_DifferInContent();
+Test_USINT_Array_Equals();
+Test_USINT_Array_DifferInSize();
+Test_USINT_Array_DifferInContent();
+Test_WORD_Array_Equals();
+Test_WORD_Array_DifferInSize();
+Test_WORD_Array_DifferInContent();
+
+~~~
+---
+~~~ST
+METHOD Test_BOOL_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BOOL_Array_DifferInContent');
+
+AssertArrayEquals_BOOL(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BOOL_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BOOL_Array_DifferInSize');
+
+AssertArrayEquals_BOOL(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BOOL_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BOOL_Array_Equals');
+
+AssertArrayEquals_BOOL(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BYTE_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BYTE_Array_DifferInContent');
+
+AssertArrayEquals_BYTE(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BYTE_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BYTE_Array_DifferInSize');
+
+AssertArrayEquals_BYTE(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BYTE_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BYTE_Array_Equals');
+
+AssertArrayEquals_BYTE(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DINT_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DINT_Array_DifferInContent');
+
+AssertArrayEquals_DINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DINT_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DINT_Array_DifferInSize');
+
+AssertArrayEquals_DINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DINT_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DINT_Array_Equals');
+
+AssertArrayEquals_DINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DWORD_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DWORD_Array_DifferInContent');
+
+AssertArrayEquals_DWORD(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DWORD_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DWORD_Array_DifferInSize');
+
+AssertArrayEquals_DWORD(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DWORD_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DWORD_Array_Equals');
+
+AssertArrayEquals_DWORD(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_INT_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_INT_Array_DifferInContent');
+
+AssertArrayEquals_INT(Expecteds := a,
+                      Actuals := b,
+                      Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_INT_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_INT_Array_DifferInSize');
+
+AssertArrayEquals_INT(Expecteds := a,
+                      Actuals := b,
+                      Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_INT_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_INT_Array_Equals');
+
+AssertArrayEquals_INT(Expecteds := a,
+                      Actuals := b,
+                      Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LINT_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LINT_Array_DifferInContent');
+
+AssertArrayEquals_LINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LINT_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LINT_Array_DifferInSize');
+
+AssertArrayEquals_LINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LINT_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LINT_Array_Equals');
+
+AssertArrayEquals_LINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Array_DifferInContent');
+
+AssertArrayEquals_LREAL(Expecteds := a,
+                        Actuals := b,
+                        Delta := 0.01,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Array_DifferInSize');
+
+AssertArrayEquals_LREAL(Expecteds := a,
+                        Actuals := b,
+                        Delta := 0.01,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Array_Equals');
+
+AssertArrayEquals_LREAL(Expecteds := a,
+                        Actuals := b,
+                        Delta := 0.01,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Array2d_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Array2d_DifferInContent');
+
+AssertArray2dEquals_LREAL(Expecteds := a,
+                          Actuals := b,
+                          Delta := 0.01,
+                          Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Array2d_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Array2d_DifferInSize');
+
+AssertArray2dEquals_LREAL(Expecteds := a,
+                          Actuals := b,
+                          Delta := 0.01,
+                          Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Array2d_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Array2d_Equals');
+
+AssertArray2dEquals_LREAL(Expecteds := a,
+                          Actuals := b,
+                          Delta := 0.01,
+                          Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Array3d_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Array3d_DifferInContent');
+
+AssertArray3dEquals_LREAL(Expecteds := a,
+                          Actuals := b,
+                          Delta := 0.01,
+                          Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Array3d_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Array3d_DifferInSize');
+
+AssertArray3dEquals_LREAL(Expecteds := a,
+                          Actuals := b,
+                          Delta := 0.01,
+                          Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Array3d_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Array3d_Equals');
+
+AssertArray3dEquals_LREAL(Expecteds := a,
+                          Actuals := b,
+                          Delta := 0.01,
+                          Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LWORD_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LWORD_Array_DifferInContent');
+
+AssertArrayEquals_LWORD(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LWORD_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LWORD_Array_DifferInSize');
+
+AssertArrayEquals_LWORD(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LWORD_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LWORD_Array_Equals');
+
+AssertArrayEquals_LWORD(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Array_DifferInContent');
+
+AssertArrayEquals_REAL(Expecteds := a,
+                       Actuals := b,
+                       Delta := 0.01,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Array_DifferInSize');
+
+AssertArrayEquals_REAL(Expecteds := a,
+                       Actuals := b,
+                       Delta := 0.01,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Array_Equals');
+
+AssertArrayEquals_REAL(Expecteds := a,
+                       Actuals := b,
+                       Delta := 0.01,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Array2d_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Array2d_DifferInContent');
+
+AssertArray2dEquals_REAL(Expecteds := a,
+                         Actuals := b,
+                         Delta := 0.01,
+                         Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Array2d_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Array2d_DifferInSize');
+
+AssertArray2dEquals_REAL(Expecteds := a,
+                         Actuals := b,
+                         Delta := 0.01,
+                         Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Array2d_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Array2d_Equals');
+
+AssertArray2dEquals_REAL(Expecteds := a,
+                         Actuals := b,
+                         Delta := 0.01,
+                         Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Array3d_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Array3d_DifferInContent');
+
+AssertArray3dEquals_REAL(Expecteds := a,
+                         Actuals := b,
+                         Delta := 0.01,
+                         Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Array3d_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Array3d_DifferInSize');
+
+AssertArray3dEquals_REAL(Expecteds := a,
+                         Actuals := b,
+                         Delta := 0.01,
+                         Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Array3d_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Array3d_Equals');
+
+AssertArray3dEquals_REAL(Expecteds := a,
+                         Actuals := b,
+                         Delta := 0.01,
+                         Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_SINT_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_SINT_Array_DifferInContent');
+
+AssertArrayEquals_SINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_SINT_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_SINT_Array_DifferInSize');
+
+AssertArrayEquals_SINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_SINT_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_SINT_Array_Equals');
+
+AssertArrayEquals_SINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UDINT_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UDINT_Array_DifferInContent');
+
+AssertArrayEquals_UDINT(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UDINT_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UDINT_Array_DifferInSize');
+
+AssertArrayEquals_UDINT(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UDINT_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UDINT_Array_Equals');
+
+AssertArrayEquals_UDINT(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UINT_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UINT_Array_DifferInContent');
+
+AssertArrayEquals_UINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UINT_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UINT_Array_DifferInSize');
+
+AssertArrayEquals_UINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UINT_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UINT_Array_Equals');
+
+AssertArrayEquals_UINT(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ULINT_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ULINT_Array_DifferInContent');
+
+AssertArrayEquals_ULINT(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ULINT_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ULINT_Array_DifferInSize');
+
+AssertArrayEquals_ULINT(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ULINT_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ULINT_Array_Equals');
+
+AssertArrayEquals_ULINT(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_USINT_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_USINT_Array_DifferInContent');
+
+AssertArrayEquals_USINT(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_USINT_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_USINT_Array_DifferInSize');
+
+AssertArrayEquals_USINT(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_USINT_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_USINT_Array_Equals');
+
+AssertArrayEquals_USINT(Expecteds := a,
+                        Actuals := b,
+                        Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WORD_Array_DifferInContent: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WORD_Array_DifferInContent');
+
+AssertArrayEquals_WORD(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WORD_Array_DifferInSize: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WORD_Array_DifferInSize');
+
+AssertArrayEquals_WORD(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WORD_Array_Equals: 
+VAR
+    a: ARRAY [..] OF ;
+    b: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WORD_Array_Equals');
+
+AssertArrayEquals_WORD(Expecteds := a,
+                       Actuals := b,
+                       Message := 'Arrays differ');
+
+TEST_FINISHED();
+~~~
+---
+
+                    
+    In this testsuite we are running the same testcase over two cycles, and thus calling every assert method twice.
+    This is in order to verify that we don't print every FAILED assert twice.
+
+
+~~~ST
+FUNCTION_BLOCK FB_AssertEveryFailedTestTwice EXTENDS CfUnit.FB_TestSuite
+VAR
+    AssertCount: USINT;
+END_VAR
+
+~~~
+~~~ST
+TwiceAssertCall();
+~~~
+---
+~~~ST
+METHOD TwiceAssertCall: 
+VAR
+    aANY: INT;
+    bANY: INT;
+    aBOOL: BOOL;
+    bBOOL: BOOL;
+    aBYTE: BYTE;
+    bBYTE: BYTE;
+    aDATE: DATE;
+    bDATE: DATE;
+    aDATE_AND_TIME: DT;
+    bDATE_AND_TIME: DT;
+    aDINT: DINT;
+    bDINT: DINT;
+    aDWORD: DWORD;
+    bDWORD: DWORD;
+    aINT: INT;
+    bINT: INT;
+    aLINT: LINT;
+    bLINT: LINT;
+    aLREAL: LREAL;
+    bLREAL: LREAL;
+    aLTIME: LTIME;
+    bLTIME: LTIME;
+    aLWORD: LWORD;
+    bLWORD: LWORD;
+    aREAL: REAL;
+    bREAL: REAL;
+    aSINT: SINT;
+    bSINT: SINT;
+    aSTRING: string;
+    bSTRING: string;
+    aUDINT: UDINT;
+    bUDINT: UDINT;
+    aUINT: UINT;
+    bUINT: UINT;
+    aULINT: ULINT;
+    bULINT: ULINT;
+    aUSINT: USINT;
+    bUSINT: USINT;
+    aTIME: TIME;
+    bTIME: TIME;
+    aTIME_OF_DAY: TOD;
+    bTIME_OF_DAY: TOD;
+    aWORD: WORD;
+    bWORD: WORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('TwiceAssertCall');
+
+AssertEquals(Expected := aANY,
+             Actual := bANY,
+             Message := 'Not equal ANY');
+
+AssertEquals_BOOL(Expected := aBOOL,
+                  Actual := bBOOL,
+                  Message := 'Not equal BOOL');
+
+AssertEquals_BYTE(Expected := aBYTE,
+                  Actual := bBYTE,
+                  Message := 'Not equal BYTE');
+
+AssertEquals_DATE(Expected := aDATE,
+                  Actual := bDATE,
+                  Message := 'Not equal DATE');
+
+AssertEquals_DATE_AND_TIME(Expected := aDATE_AND_TIME,
+                           Actual := bDATE_AND_TIME,
+                           Message := 'Not equal DATE_AND_TIME');
+
+AssertEquals_DINT(Expected := aDINT,
+                  Actual := bDINT,
+                  Message := 'Not equal DINT');
+
+AssertEquals_DWORD(Expected := aDWORD,
+                   Actual := bDWORD,
+                   Message := 'Not equal DWORD');
+
+AssertEquals_INT(Expected := aINT,
+                 Actual := bINT,
+                 Message := 'Not equal INT');
+
+AssertEquals_LINT(Expected := aLINT,
+                  Actual := bLINT,
+                  Message := 'Not equal LINT');
+
+AssertEquals_LREAL(Expected := aLREAL,
+                   Actual := bLREAL,
+                   Delta := 0.1,
+                   Message := 'Not equal LREAL');
+
+AssertEquals_LTIME(Expected := aLTIME,
+                   Actual := bLTIME,
+                   Message := 'Not equal LTIME');
+
+AssertEquals_LWORD(Expected := aLWORD,
+                   Actual := bLWORD,
+                   Message := 'Not equal LWORD');
+
+AssertEquals_REAL(Expected := aREAL,
+                  Actual := bREAL,
+                  Delta := 0.1,
+                  Message := 'Not equal REAL');
+
+AssertEquals_SINT(Expected := aSINT,
+                  Actual := bSINT,
+                  Message := 'Not equal SINT');
+
+AssertEquals_STRING(Expected := aSTRING,
+                    Actual := bSTRING,
+                    Message := 'Not equal STRING');
+
+AssertEquals_UDINT(Expected := aUDINT,
+                   Actual := bUDINT,
+                   Message := 'Not equal UDINT');
+
+AssertEquals_UINT(Expected := aUINT,
+                  Actual := bUINT,
+                  Message := 'Not equal UINT');
+
+AssertEquals_ULINT(Expected := aULINT,
+                   Actual := bULINT,
+                   Message := 'Not equal ULINT');
+
+AssertEquals_USINT(Expected := aUSINT,
+                   Actual := bUSINT,
+                   Message := 'Not equal USINT');
+
+AssertEquals_TIME(Expected := aTIME,
+                  Actual := bTIME,
+                  Message := 'Not equal TIME');
+
+AssertEquals_TIME_OF_DAY(Expected := aTIME_OF_DAY,
+                         Actual := bTIME_OF_DAY,
+                         Message := 'Not equal TIME_OF_DAY');
+
+AssertEquals_WORD(Expected := aWORD,
+                  Actual := bWORD,
+                  Message := 'Not equal WORD');
+
+AssertCount := AssertCount + 1;
+IF AssertCount = 2 THEN
+    TEST_FINISHED();
+END_IF
+~~~
+---
+
+                    
+    In this testsuite we are running the same testcase over two cycles, and thus calling
+    every assert method twice. This is in order to verify that we don't print every FAILED assert twice.
+    With this version we are doing it with arrays.
+
+
+~~~ST
+FUNCTION_BLOCK FB_AssertEveryFailedTestTwiceArrayVersion EXTENDS CfUnit.FB_TestSuite
+VAR
+    AssertCount: USINT;
+END_VAR
+
+~~~
+~~~ST
+TwiceAssertCall_Arrays();
+~~~
+---
+~~~ST
+METHOD TwiceAssertCall_Arrays: 
+VAR
+    aBOOL: ARRAY [..] OF ;
+    bBOOL: ARRAY [..] OF ;
+    aBYTE: ARRAY [..] OF ;
+    bBYTE: ARRAY [..] OF ;
+    aDINT: ARRAY [..] OF ;
+    bDINT: ARRAY [..] OF ;
+    aDWORD: ARRAY [..] OF ;
+    bDWORD: ARRAY [..] OF ;
+    aINT: ARRAY [..] OF ;
+    bINT: ARRAY [..] OF ;
+    aLINT: ARRAY [..] OF ;
+    bLINT: ARRAY [..] OF ;
+    aLREAL: ARRAY [..] OF ;
+    bLREAL: ARRAY [..] OF ;
+    aLREAL2d: ARRAY [..] OF ;
+    bLREAL2d: ARRAY [..] OF ;
+    aLREAL3d: ARRAY [..] OF ;
+    bLREAL3d: ARRAY [..] OF ;
+    aLWORD: ARRAY [..] OF ;
+    bLWORD: ARRAY [..] OF ;
+    aREAL: ARRAY [..] OF ;
+    bREAL: ARRAY [..] OF ;
+    aREAL2d: ARRAY [..] OF ;
+    bREAL2d: ARRAY [..] OF ;
+    aREAL3d: ARRAY [..] OF ;
+    bREAL3d: ARRAY [..] OF ;
+    aSINT: ARRAY [..] OF ;
+    bSINT: ARRAY [..] OF ;
+    aUDINT: ARRAY [..] OF ;
+    bUDINT: ARRAY [..] OF ;
+    aUINT: ARRAY [..] OF ;
+    bUINT: ARRAY [..] OF ;
+    aULINT: ARRAY [..] OF ;
+    bULINT: ARRAY [..] OF ;
+    aUSINT: ARRAY [..] OF ;
+    bUSINT: ARRAY [..] OF ;
+    aWORD: ARRAY [..] OF ;
+    bWORD: ARRAY [..] OF ;
+END_VAR
+
+~~~
+~~~ST
+TEST('TwiceAssertCall_Arrays');
+
+AssertArrayEquals_BOOL(Expecteds := aBOOL,
+                       Actuals := bBOOL,
+                       Message := 'Not equal BOOL');
+
+AssertArrayEquals_BYTE(Expecteds := aBYTE,
+                       Actuals := bBYTE,
+                       Message := 'Not equal BYTE');
+
+AssertArrayEquals_DINT(Expecteds := aDINT,
+                       Actuals := bDINT,
+                       Message := 'Not equal DINT');
+
+AssertArrayEquals_DWORD(Expecteds := aDWORD,
+                        Actuals := bDWORD,
+                        Message := 'Not equal DWORD');
+
+AssertArrayEquals_INT(Expecteds := aINT,
+                      Actuals := bINT,
+                      Message := 'Not equal INT');
+
+AssertArrayEquals_LINT(Expecteds := aLINT,
+                       Actuals := bLINT,
+                       Message := 'Not equal LINT');
+
+AssertArrayEquals_LREAL(Expecteds := aLREAL,
+                        Actuals := bLREAL,
+                        Delta := 0.1,
+                        Message := 'Not equal LREAL');
+
+AssertArray2dEquals_LREAL(Expecteds := aLREAL2d,
+                          Actuals := bLREAL2d,
+                          Delta := 0.1,
+                          Message := 'Not equal LREAL2D');
+
+AssertArray3dEquals_LREAL(Expecteds := aLREAL3d,
+                          Actuals := bLREAL3d,
+                          Delta := 0.1,
+                          Message := 'Not equal LREAL3D');
+
+AssertArrayEquals_LWORD(Expecteds := aLWORD,
+                        Actuals := bLWORD,
+                        Message := 'Not equal LWORD');
+
+AssertArrayEquals_SINT(Expecteds := aSINT,
+                       Actuals := bSINT,
+                       Message := 'Not equal SINT');
+
+AssertArrayEquals_REAL(Expecteds := aREAL,
+                       Actuals := bREAL,
+                       Delta := 0.00001,
+                       Message := 'Not equal REAL');
+
+AssertArray2dEquals_REAL(Expecteds := aREAL2d,
+                         Actuals := bREAL2d,
+                         Delta := 0.0001,
+                         Message := 'Not equal REAL2D');
+
+AssertArray3dEquals_REAL(Expecteds := aREAL3d,
+                         Actuals := bREAL3d,
+                         Delta := 0.01,
+                         Message := 'Not equal REAL3D');
+
+AssertArrayEquals_UDINT(Expecteds := aUDINT,
+                        Actuals := bUDINT,
+                        Message := 'Not equal UDINT');
+
+AssertArrayEquals_UINT(Expecteds := aUINT,
+                       Actuals := bUINT,
+                       Message := 'Not equal UINT');
+
+AssertArrayEquals_ULINT(Expecteds := aULINT,
+                        Actuals := bULINT,
+                        Message := 'Not equal ULINT');
+
+AssertArrayEquals_USINT(Expecteds := aUSINT,
+                        Actuals := bUSINT,
+                        Message := 'Not equal USINT');
+
+AssertArrayEquals_WORD(Expecteds := aWORD,
+                       Actuals := bWORD,
+                       Message := 'Not equal WORD');
+
+AssertCount := AssertCount + 1;
+IF AssertCount = 2 THEN
+    TEST_FINISHED();
+END_IF
+~~~
+---
+
+                     
+    This testsuite verifies that the Assert_True and Assert_False methods do what they are supposed to. It does so
+    by making sure that every assert-method (assert_true & assert_false) does both one failing and one successful
+    assert.
+
+
+~~~ST
+FUNCTION_BLOCK FB_AssertTrueFalse EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+AssertThatINTsAreEqual();
+AssertThatINTsAreNotEqual();
+AssertThatWORDsAreEqual();
+AssertThatWORDsAreNotEqual();
+~~~
+---
+~~~ST
+METHOD AssertThatINTsAreEqual: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('AssertThatINTsAreEqual');
+
+AssertFalse(Condition := (a <> b),
+            Message := 'INTs are equal');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD AssertThatINTsAreNotEqual: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('AssertThatINTsAreNotEqual');
+
+AssertFalse(Condition := (a = b),
+            Message := 'INTs are equal');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD AssertThatWORDsAreEqual: 
+VAR
+    a: WORD;
+    b: WORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('AssertThatWORDsAreEqual');
+
+AssertTrue(Condition := (a = b),
+           Message := 'WORDs are not equal');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD AssertThatWORDsAreNotEqual: 
+VAR
+    a: WORD;
+    b: WORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('AssertThatWORDsAreNotEqual');
+
+AssertTrue(Condition := (a <> b),
+           Message := 'WORDs are equal');
+
+TEST_FINISHED();
+~~~
+---
+
+                    
+    Verifies that the function IS_TEST_FINISHED('Name') works as intended.
+
+
+~~~ST
+FUNCTION_BLOCK FB_CheckIfSpecificTestIsFinished EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+CheckBeforeAndAfterFinishing();
+~~~
+---
+~~~ST
+METHOD CheckBeforeAndAfterFinishing: 
+
+~~~
+~~~ST
+TEST('CheckBeforeAndAfterFinishing');
+
+AssertEquals_BOOL(Expected := FALSE,
+                  Actual := IS_TEST_FINISHED('CheckBeforeAndAfterFinishing'),
+                  Message:='Values differ before finishing');
+
+TEST_FINISHED();
+
+AssertEquals_BOOL(Expected := TRUE,
+                  Actual := IS_TEST_FINISHED('CheckBeforeAndAfterFinishing'),
+                  Message:='Values differ after finishing');
+~~~
+---
+
+                    
+    This testsuite runs two tests. One that is enabled (and that is supposed to fail), and one that is disabled (and
+    even though it also is failing is not supposed to run).
+
+
+~~~ST
+FUNCTION_BLOCK FB_CreateDisabledTest EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+TestEnabled();
+TestDisabled();
+~~~
+---
+~~~ST
+METHOD TestDisabled: 
+VAR
+    a: BOOL;
+    b: BOOL;
+END_VAR
+
+~~~
+~~~ST
+TEST('DISABLED_ThisShouldNotExecute');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'A does not equal B');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD TestEnabled: 
+VAR
+    a: BOOL;
+    b: BOOL;
+END_VAR
+
+~~~
+~~~ST
+TEST('TestEnabled');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'A does not equal B');
+
+TEST_FINISHED();
+~~~
+---
+
+                    
+    This testsuite creates four tests in the same testsuite with the same name. Every test in a testsuite should have
+    an unique name. Every assert should be ignored if a duplicate test is being run.
+
+
+~~~ST
+FUNCTION_BLOCK FB_CreateFourTestsWithSameName EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+TestOne();
+TestOne_Again();
+TestOne_AgainAgain();
+TestOne_AgainAgainAgain();
+~~~
+---
+~~~ST
+METHOD TestOne: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('TestOne');
+
+AssertEquals_INT(Expected := a,
+                 Actual := b,
+                 Message := 'A does not equal B');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD TestOne_Again: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('TestOne');
+
+AssertEquals_INT(Expected := a,
+                 Actual := b,
+                 Message := 'A does not equal B again');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD TestOne_AgainAgain: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('TestOne');
+
+AssertEquals_INT(Expected := a,
+                 Actual := b,
+                 Message := 'A does not equal B again');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD TestOne_AgainAgainAgain: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('TestOne');
+
+AssertEquals_INT(Expected := a,
+                 Actual := b,
+                 Message := 'A does not equal B again');
+
+TEST_FINISHED();
+~~~
+---
+
+                     This is an empty testsuite with no test cases, so that we can verify that the system still prints the
+   test results. 
+
+~~~ST
+FUNCTION_BLOCK FB_EmptyTestSuite EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+
+~~~
+---
+
+                    
+    This test-suite runs several asserts with the same parameters (same expected, actual, message), calling the asserts
+    in different cycles and using the same test.
+    On top of this, we will call new asserts (though with same parameters) in later cycles.
+    The reason we want the framework to support this is that theoretically the user could want to do an assert with the
+    same message, using the same test with the same data values for both expected and actual, and splitting the asserts
+    on different cycles.
+
+
+~~~ST
+FUNCTION_BLOCK FB_MultipleAssertWithSameParametersInDifferentCyclesAndInSameTest EXTENDS CfUnit.FB_TestSuite
+VAR
+    TimerAgain: TON;
+    TimerAgainAgain: TON;
+    CalledAll: BOOL;
+END_VAR
+
+~~~
+~~~ST
+Assert_SeveralTimes();
+~~~
+---
+~~~ST
+METHOD Assert_SeveralTimes: 
+VAR
+    a: DWORD;
+    b: DWORD;
+    c: DWORD;
+    d: DWORD;
+    e: DWORD;
+    f: DWORD;
+    g: DWORD;
+    h: DWORD;
+    i: DWORD;
+    j: DWORD;
+    k: DWORD;
+    l: DWORD;
+    m: DWORD;
+    n: DWORD;
+    o: DWORD;
+    p: DWORD;
+    q: DWORD;
+    rr: DWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Assert_SeveralTimes');
+
+AssertEquals_DWORD(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+AssertEquals_DWORD(Expected := c,
+                   Actual := d,
+                   Message := 'Values differ');
+AssertEquals_DWORD(Expected := e,
+                   Actual := f,
+                   Message := 'Values differ');
+
+TimerAgain(IN := TRUE);
+IF TimerAgain.Q THEN
+    TimerAgainAgain(IN := TRUE);
+    AssertEquals_DWORD(Expected := g,
+                       Actual := h,
+                       Message := 'Values differ');
+    AssertEquals_DWORD(Expected := i,
+                       Actual := j,
+                       Message := 'Values differ');
+    AssertEquals_DWORD(Expected := k,
+                       Actual := l,
+                       Message := 'Values differ');
+END_IF
+
+IF TimerAgainAgain.Q THEN
+    AssertEquals_DWORD(Expected := m,
+                       Actual := n,
+                       Message := 'Values differ');
+    AssertEquals_DWORD(Expected := o,
+                       Actual := p,
+                       Message := 'Values differ');
+    AssertEquals_DWORD(Expected := q,
+                       Actual := rr,
+                       Message := 'Values differ');
+    CalledAll := TRUE;
+    TEST_FINISHED();
+END_IF
+~~~
+---
+
+                    
+    This test-suite runs several asserts with the same parameters (same expected, actual, message), calling the asserts
+    in different cycles and using different tests.
+    On top of this, we will call new asserts (though with same parameters) in later cycles.
+    The reason we want the framework to support this is that theoretically the user could want to do an assert with the
+    same message, in different tests, with the same data values for both expected and actual, although the data that the
+    user does the assert on might be from different data sets.
+
+
+~~~ST
+FUNCTION_BLOCK FB_MultipleAssertWithSameParametersInDifferentCyclesButWithDifferentTests EXTENDS CfUnit.FB_TestSuite
+VAR
+    TimerAgain: TON;
+    TimerAgainAgain: TON;
+    CalledAll: BOOL;
+END_VAR
+
+~~~
+~~~ST
+TimerAgain(IN := TRUE);
+
+Assert_SeveralTimes();
+
+IF TimerAgain.Q THEN
+    TimerAgainAgain(IN := TRUE);
+    Assert_SeveralTimesAgain();
+END_IF
+
+IF TimerAgainAgain.Q THEN
+    Assert_SeveralTimesAgainAgain();
+    CalledAll := TRUE;
+END_IF
+~~~
+---
+~~~ST
+METHOD Assert_SeveralTimes: 
+VAR
+    a: DWORD;
+    b: DWORD;
+    c: DWORD;
+    d: DWORD;
+    e: DWORD;
+    f: DWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Assert_SeveralTimes');
+
+AssertEquals_DWORD(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+AssertEquals_DWORD(Expected := c,
+                   Actual := d,
+                   Message := 'Values differ');
+
+AssertEquals_DWORD(Expected := e,
+                   Actual := f,
+                   Message := 'Values differ');
+
+IF CalledAll THEN
+    TEST_FINISHED();
+END_IF
+~~~
+---
+~~~ST
+METHOD Assert_SeveralTimesAgain: 
+VAR
+    a: DWORD;
+    b: DWORD;
+    c: DWORD;
+    d: DWORD;
+    e: DWORD;
+    f: DWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Assert_SeveralTimesAgain');
+
+AssertEquals_DWORD(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+AssertEquals_DWORD(Expected := c,
+                   Actual := d,
+                   Message := 'Values differ');
+
+AssertEquals_DWORD(Expected := e,
+                   Actual := f,
+                   Message := 'Values differ');
+
+IF CalledAll THEN
+    TEST_FINISHED();
+END_IF
+~~~
+---
+~~~ST
+METHOD Assert_SeveralTimesAgainAgain: 
+VAR
+    a: DWORD;
+    b: DWORD;
+    c: DWORD;
+    d: DWORD;
+    e: DWORD;
+    f: DWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Assert_SeveralTimesAgainAgain');
+
+AssertEquals_DWORD(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+AssertEquals_DWORD(Expected := c,
+                   Actual := d,
+                   Message := 'Values differ');
+
+AssertEquals_DWORD(Expected := e,
+                   Actual := f,
+                   Message := 'Values differ');
+
+IF CalledAll THEN
+    TEST_FINISHED();
+END_IF
+~~~
+---
+
+                    
+    This test-suite runs several asserts with the same parameters (same expected, actual, message) in the same cycle
+    and in the same test.
+    The reason we want the framework to support this is that theoretically the user could want to do an assert with the
+    same message, in the same test, with the same data values for both expected and actual, although the data that the
+    user does the assert on might be from different data sets.
+
+
+~~~ST
+FUNCTION_BLOCK FB_MultipleAssertWithSameParametersInSameCycleWithSameTest EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+Assert_SeveralTimes();
+~~~
+---
+~~~ST
+METHOD Assert_SeveralTimes: 
+VAR
+    a: DWORD;
+    b: DWORD;
+    c: DWORD;
+    d: DWORD;
+    e: DWORD;
+    f: DWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Assert_SeveralTimes');
+
+AssertEquals_DWORD(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+AssertEquals_DWORD(Expected := c,
+                   Actual := d,
+                   Message := 'Values differ');
+
+AssertEquals_DWORD(Expected := e,
+                   Actual := f,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+
+                    
+    This testsuite tests the different assert-functions for all the different data types in TwinCAT.
+    For every data type at least two different tests have been defined:
+        1. One test that succeeds (Expected and actual are equal)
+        2. One test that fails (Expected and actual are false).
+
+
+~~~ST
+FUNCTION_BLOCK FB_PrimitiveTypes EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+Test_ANY_Equals();
+Test_ANY_Differ_DataType();
+Test_BOOL_Equals();
+Test_BOOL_Differ();
+Test_BYTE_Equals();
+Test_BYTE_Differ();
+Test_DATE_AND_TIME_Equals();
+Test_DATE_AND_TIME_Differ();
+Test_DATE_Equals();
+Test_DATE_Differ();
+Test_DINT_Equals();
+Test_DINT_Differ();
+Test_DWORD_Equals();
+Test_DWORD_Differ();
+Test_INT_Equals();
+Test_INT_Differ();
+Test_LINT_Equals();
+Test_LINT_Differ();
+Test_LREAL_Equals();
+Test_LREAL_Differ();
+Test_LTIME_Equals();
+Test_LTIME_Differ();
+Test_LWORD_Equals();
+Test_LWORD_Differ();
+Test_REAL_Equals();
+Test_REAL_Differ();
+Test_SINT_Equals();
+Test_SINT_Differ();
+Test_STRING_Equals();
+Test_STRING_Differ();
+Test_TIME_Equals();
+Test_TIME_Differ();
+Test_TIME_OF_DAY_Equals();
+Test_TIME_OF_DAY_Differ();
+Test_UDINT_Equals();
+Test_UDINT_Differ();
+Test_UINT_Equals();
+Test_UINT_Differ();
+Test_ULINT_Equals();
+Test_ULINT_Differ();
+Test_USINT_Equals();
+Test_USINT_Differ();
+Test_WORD_Equals();
+Test_WORD_Differ();
+~~~
+---
+~~~ST
+METHOD Test_ANY_Differ_DataType: 
+VAR
+    a: INT;
+    b: UINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_Differ_DataType');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ANY_Equals: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ANY_Equals');
+
+AssertEquals(Expected := a,
+             Actual := b,
+             Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BOOL_Differ: 
+VAR
+    a: BOOL;
+    b: BOOL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BOOL_Differ');
+
+AssertEquals_BOOL(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BOOL_Equals: 
+VAR
+    a: BOOL;
+    b: BOOL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BOOL_Equals');
+
+AssertEquals_BOOL(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BYTE_Differ: 
+VAR
+    a: BYTE;
+    b: BYTE;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BYTE_Differ');
+
+AssertEquals_BYTE(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_BYTE_Equals: 
+VAR
+    a: BYTE;
+    b: BYTE;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_BYTE_Equals');
+
+AssertEquals_BYTE(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DATE_AND_TIME_Differ: 
+VAR
+    a: DT;
+    b: DT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DATE_AND_TIME_Differ');
+
+AssertEquals_DATE_AND_TIME(Expected := a,
+                           Actual := b,
+                           Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DATE_AND_TIME_Equals: 
+VAR
+    a: DT;
+    b: DT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DATE_AND_TIME_Equals');
+
+AssertEquals_DATE_AND_TIME(Expected := a,
+                           Actual := b,
+                           Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DATE_Differ: 
+VAR
+    a: DATE;
+    b: DATE;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DATE_Differ');
+
+AssertEquals_DATE(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DATE_Equals: 
+VAR
+    a: DATE;
+    b: DATE;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DATE_Equals');
+
+AssertEquals_DATE(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DINT_Differ: 
+VAR
+    a: DINT;
+    b: DINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DINT_Differ');
+
+AssertEquals_DINT(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DINT_Equals: 
+VAR
+    a: DINT;
+    b: DINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DINT_Equals');
+
+AssertEquals_DINT(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DWORD_Differ: 
+VAR
+    a: DWORD;
+    b: DWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DWORD_Differ');
+
+AssertEquals_DWORD(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_DWORD_Equals: 
+VAR
+    a: DWORD;
+    b: DWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_DWORD_Equals');
+
+AssertEquals_DWORD(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_INT_Differ: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_INT_Differ');
+
+AssertEquals_INT(Expected := a,
+                 Actual := b,
+                 Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_INT_Equals: 
+VAR
+    a: INT;
+    b: INT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_INT_Equals');
+
+AssertEquals_INT(Expected := a,
+                 Actual := b,
+                 Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LINT_Differ: 
+VAR
+    a: LINT;
+    b: LINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LINT_Differ');
+
+AssertEquals_LINT(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LINT_Equals: 
+VAR
+    a: LINT;
+    b: LINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LINT_Equals');
+
+AssertEquals_LINT(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Differ: 
+VAR
+    a: LREAL;
+    b: LREAL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Differ');
+
+AssertEquals_LREAL(Expected := a,
+                   Actual := b,
+                   Delta := 0.1,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LREAL_Equals: 
+VAR
+    a: LREAL;
+    b: LREAL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LREAL_Equals');
+
+AssertEquals_LREAL(Expected := a,
+                   Actual := b,
+                   Delta := 0.2,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LTIME_Differ: 
+VAR
+    a: LTIME;
+    b: LTIME;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LTIME_Differ');
+
+AssertEquals_LTIME(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LTIME_Equals: 
+VAR
+    a: LTIME;
+    b: LTIME;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LTIME_Equals');
+
+AssertEquals_LTIME(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LWORD_Differ: 
+VAR
+    a: LWORD;
+    b: LWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LWORD_Differ');
+
+AssertEquals_LWORD(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_LWORD_Equals: 
+VAR
+    a: LWORD;
+    b: LWORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_LWORD_Equals');
+
+AssertEquals_LWORD(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Differ: 
+VAR
+    a: REAL;
+    b: REAL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Differ');
+
+AssertEquals_REAL(Expected := a,
+                  Actual := b,
+                  Delta := 0.05,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_REAL_Equals: 
+VAR
+    a: REAL;
+    b: REAL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_REAL_Equals');
+
+AssertEquals_REAL(Expected := a,
+                  Actual := b,
+                  Delta := 0.1,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_SINT_Differ: 
+VAR
+    a: SINT;
+    b: SINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_SINT_Differ');
+
+AssertEquals_SINT(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_SINT_Equals: 
+VAR
+    a: SINT;
+    b: SINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_SINT_Equals');
+
+AssertEquals_SINT(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_STRING_Differ: 
+VAR
+    a: string;
+    b: string;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_STRING_Differ');
+
+AssertEquals_STRING(Expected := a,
+                    Actual := b,
+                    Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_STRING_Equals: 
+VAR
+    a: string;
+    b: string;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_STRING_Equals');
+
+AssertEquals_STRING(Expected := a,
+                    Actual := b,
+                    Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_TIME_Differ: 
+VAR
+    a: TIME;
+    b: TIME;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_TIME_Differ');
+
+AssertEquals_TIME(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_TIME_Equals: 
+VAR
+    a: TIME;
+    b: TIME;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_TIME_Equals');
+
+AssertEquals_TIME(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_TIME_OF_DAY_Differ: 
+VAR
+    a: TOD;
+    b: TOD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_TIME_OF_DAY_Differ');
+
+AssertEquals_TIME_OF_DAY(Expected := a,
+                         Actual := b,
+                         Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_TIME_OF_DAY_Equals: 
+VAR
+    a: TOD;
+    b: TOD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_TIME_OF_DAY_Equals');
+
+AssertEquals_TIME_OF_DAY(Expected := a,
+                         Actual := b,
+                         Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UDINT_Differ: 
+VAR
+    a: UDINT;
+    b: UDINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UDINT_Differ');
+
+AssertEquals_UDINT(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UDINT_Equals: 
+VAR
+    a: UDINT;
+    b: UDINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UDINT_Equals');
+
+AssertEquals_UDINT(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UINT_Differ: 
+VAR
+    a: UINT;
+    b: UINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UINT_Differ');
+
+AssertEquals_UINT(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_UINT_Equals: 
+VAR
+    a: UINT;
+    b: UINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_UINT_Equals');
+
+AssertEquals_UINT(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ULINT_Differ: 
+VAR
+    a: ULINT;
+    b: ULINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ULINT_Differ');
+
+AssertEquals_ULINT(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_ULINT_Equals: 
+VAR
+    a: ULINT;
+    b: ULINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_ULINT_Equals');
+
+AssertEquals_ULINT(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_USINT_Differ: 
+VAR
+    a: USINT;
+    b: USINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_USINT_Differ');
+
+AssertEquals_USINT(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_USINT_Equals: 
+VAR
+    a: USINT;
+    b: USINT;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_USINT_Equals');
+
+AssertEquals_USINT(Expected := a,
+                   Actual := b,
+                   Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WORD_Differ: 
+VAR
+    a: WORD;
+    b: WORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WORD_Differ');
+
+AssertEquals_WORD(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WORD_Equals: 
+VAR
+    a: WORD;
+    b: WORD;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WORD_Equals');
+
+AssertEquals_WORD(Expected := a,
+                  Actual := b,
+                  Message := 'Values differ');
+
+TEST_FINISHED();
+~~~
+---
+
+                     This function blocks tests the TEST_FINISHED_NAMED function by creating various tests
+   and finishing them in steps 
+
+~~~ST
+FUNCTION_BLOCK FB_TestFinishedNamed EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+
+~~~
+---
+
+                    
+    This testsuite tests the WRITE_PROTECTED_* helper functions.
+
+
+~~~ST
+FUNCTION_BLOCK FB_WriteProtectedFunctions EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+Test_WRITE_PROTECTED_BOOL();
+Test_WRITE_PROTECTED_BYTE();
+Test_WRITE_PROTECTED_DATE();
+Test_WRITE_PROTECTED_DATE_AND_TIME();
+Test_WRITE_PROTECTED_DINT();
+Test_WRITE_PROTECTED_DWORD();
+Test_WRITE_PROTECTED_INT();
+Test_WRITE_PROTECTED_LREAL();
+Test_WRITE_PROTECTED_REAL();
+Test_WRITE_PROTECTED_SINT();
+Test_WRITE_PROTECTED_STRING();
+Test_WRITE_PROTECTED_TIME();
+Test_WRITE_PROTECTED_TIME_OF_DAY();
+Test_WRITE_PROTECTED_UDINT();
+Test_WRITE_PROTECTED_UINT();
+Test_WRITE_PROTECTED_USINT();
+Test_WRITE_PROTECTED_WORD();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_BOOL: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_BOOL');
+
+WRITE_PROTECTED_BOOL(ADR(ProtectedVariables.InputBOOL), TRUE);
+AssertEquals_BOOL(TRUE, ProtectedVariables.InputBOOL, 'Overwriting protected InputBOOL');
+
+WRITE_PROTECTED_BOOL(ADR(ProtectedVariables.VarBOOL), TRUE);
+AssertEquals_BOOL(TRUE, ProtectedVariables.VarBOOL, 'Overwriting protected VarBOOL');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_BYTE: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_BYTE');
+
+WRITE_PROTECTED_BYTE(ADR(ProtectedVariables.InputBYTE), 1);
+AssertEquals_BYTE(1, ProtectedVariables.InputBYTE, 'Overwriting protected InputBYTE');
+
+WRITE_PROTECTED_BYTE(ADR(ProtectedVariables.VarBYTE), 1);
+AssertEquals_BYTE(1, ProtectedVariables.VarBYTE, 'Overwriting protected VarBYTE');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_DATE: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_DATE');
+
+WRITE_PROTECTED_DATE(ADR(ProtectedVariables.InputDATE), D#2000-01-01);
+AssertEquals_DATE(D#2000-01-01, ProtectedVariables.InputDATE, 'Overwriting protected InputDATE');
+
+WRITE_PROTECTED_DATE(ADR(ProtectedVariables.VarDATE), D#2000-01-01);
+AssertEquals_DATE(D#2000-01-01, ProtectedVariables.VarDATE, 'Overwriting protected VarDATE');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_DATE_AND_TIME: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_DATE_AND_TIME');
+
+WRITE_PROTECTED_DATE_AND_TIME(ADR(ProtectedVariables.InputDATE_AND_TIME), DT#2000-01-01-00:00);
+AssertEquals_DATE_AND_TIME(DT#2000-01-01-00:00, ProtectedVariables.InputDATE_AND_TIME, 'Overwriting protected InputDATE_AND_TIME');
+
+WRITE_PROTECTED_DATE_AND_TIME(ADR(ProtectedVariables.VarDATE_AND_TIME), DT#2000-01-01-00:00);
+AssertEquals_DATE_AND_TIME(DT#2000-01-01-00:00, ProtectedVariables.VarDATE_AND_TIME, 'Overwriting protected VarDATE_AND_TIME');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_DINT: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_DINT');
+
+WRITE_PROTECTED_DINT(ADR(ProtectedVariables.InputDINT), 1);
+AssertEquals_DINT(1, ProtectedVariables.InputDINT, 'Overwriting protected InputDINT');
+
+WRITE_PROTECTED_DINT(ADR(ProtectedVariables.VarDINT), 1);
+AssertEquals_DINT(1, ProtectedVariables.VarDINT, 'Overwriting protected VarDINT');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_DWORD: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_DWORD');
+
+WRITE_PROTECTED_DWORD(ADR(ProtectedVariables.InputDWORD), 1);
+AssertEquals_DWORD(1, ProtectedVariables.InputDWORD, 'Overwriting protected InputDWORD');
+
+WRITE_PROTECTED_DWORD(ADR(ProtectedVariables.VarDWORD), 1);
+AssertEquals_DWORD(1, ProtectedVariables.VarDWORD, 'Overwriting protected VarDWORD');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_INT: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_INT');
+
+WRITE_PROTECTED_INT(ADR(ProtectedVariables.InputINT), 1);
+AssertEquals_INT(1, ProtectedVariables.InputINT, 'Overwriting protected InputINT');
+
+WRITE_PROTECTED_INT(ADR(ProtectedVariables.VarINT), 1);
+AssertEquals_INT(1, ProtectedVariables.VarINT, 'Overwriting protected VarINT');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_LREAL: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_LREAL');
+
+WRITE_PROTECTED_LREAL(ADR(ProtectedVariables.InputLREAL), 1);
+AssertEquals_LREAL(1, ProtectedVariables.InputLREAL, 0, 'Overwriting protected InputLREAL');
+
+WRITE_PROTECTED_LREAL(ADR(ProtectedVariables.VarLREAL), 1);
+AssertEquals_LREAL(1, ProtectedVariables.VarLREAL, 0, 'Overwriting protected VarLREAL');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_REAL: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_REAL');
+
+WRITE_PROTECTED_REAL(ADR(ProtectedVariables.InputREAL), 1);
+AssertEquals_REAL(1, ProtectedVariables.InputREAL, 0, 'Overwriting protected InputREAL');
+
+WRITE_PROTECTED_REAL(ADR(ProtectedVariables.VarREAL), 1);
+AssertEquals_REAL(1, ProtectedVariables.VarREAL, 0, 'Overwriting protected VarREAL');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_SINT: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_SINT');
+
+WRITE_PROTECTED_SINT(ADR(ProtectedVariables.InputSINT), 1);
+AssertEquals_SINT(1, ProtectedVariables.InputSINT, 'Overwriting protected InputSINT');
+
+WRITE_PROTECTED_SINT(ADR(ProtectedVariables.VarSINT), 1);
+AssertEquals_SINT(1, ProtectedVariables.VarSINT, 'Overwriting protected VarSINT');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_STRING: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_STRING');
+
+WRITE_PROTECTED_STRING(ADR(ProtectedVariables.InputSTRING), 'words');
+AssertEquals_STRING('words', ProtectedVariables.InputSTRING, 'Overwriting protected InputSTRING');
+
+WRITE_PROTECTED_STRING(ADR(ProtectedVariables.VarSTRING), 'words');
+AssertEquals_STRING('words', ProtectedVariables.VarSTRING, 'Overwriting protected VarSTRING');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_TIME: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_TIME');
+
+WRITE_PROTECTED_TIME(ADR(ProtectedVariables.InputTIME), T#1S);
+AssertEquals_TIME(T#1S, ProtectedVariables.InputTIME, 'Overwriting protected InputTIME');
+
+WRITE_PROTECTED_TIME(ADR(ProtectedVariables.VarTIME), T#1S);
+AssertEquals_TIME(T#1S, ProtectedVariables.VarTIME, 'Overwriting protected VarTIME');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_TIME_OF_DAY: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_TIME_OF_DAY');
+
+WRITE_PROTECTED_TIME_OF_DAY(ADR(ProtectedVariables.InputTIME_OF_DAY), TOD#11:11);
+AssertEquals_TIME_OF_DAY(TOD#11:11, ProtectedVariables.InputTIME_OF_DAY, 'Overwriting protected InputTIME_OF_DAY');
+
+WRITE_PROTECTED_TIME_OF_DAY(ADR(ProtectedVariables.VarTIME_OF_DAY), TOD#11:11);
+AssertEquals_TIME_OF_DAY(TOD#11:11, ProtectedVariables.VarTIME_OF_DAY, 'Overwriting protected VarTIME_OF_DAY');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_UDINT: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_UDINT');
+
+WRITE_PROTECTED_UDINT(ADR(ProtectedVariables.InputUDINT), 1);
+AssertEquals_UDINT(1, ProtectedVariables.InputUDINT, 'Overwriting protected InputUDINT');
+
+WRITE_PROTECTED_UDINT(ADR(ProtectedVariables.VarUDINT), 1);
+AssertEquals_UDINT(1, ProtectedVariables.VarUDINT, 'Overwriting protected VarUDINT');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_UINT: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_UINT');
+
+WRITE_PROTECTED_UINT(ADR(ProtectedVariables.InputUINT), 1);
+AssertEquals_UINT(1, ProtectedVariables.InputUINT, 'Overwriting protected InputUINT');
+
+WRITE_PROTECTED_UINT(ADR(ProtectedVariables.VarUINT), 1);
+AssertEquals_UINT(1, ProtectedVariables.VarUINT, 'Overwriting protected VarUINT');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_USINT: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_USINT');
+
+WRITE_PROTECTED_USINT(ADR(ProtectedVariables.InputUSINT), 1);
+AssertEquals_USINT(1, ProtectedVariables.InputUSINT, 'Overwriting protected InputUSINT');
+
+WRITE_PROTECTED_USINT(ADR(ProtectedVariables.VarUSINT), 1);
+AssertEquals_USINT(1, ProtectedVariables.VarUSINT, 'Overwriting protected VarUSINT');
+
+TEST_FINISHED();
+~~~
+---
+~~~ST
+METHOD Test_WRITE_PROTECTED_WORD: 
+VAR
+    ProtectedVariables: FB_ProtectedVariables;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_WRITE_PROTECTED_WORD');
+
+WRITE_PROTECTED_WORD(ADR(ProtectedVariables.InputWORD), 1);
+AssertEquals_WORD(1, ProtectedVariables.InputWORD, 'Overwriting protected InputWORD');
+
+WRITE_PROTECTED_WORD(ADR(ProtectedVariables.VarWORD), 1);
+AssertEquals_WORD(1, ProtectedVariables.VarWORD, 'Overwriting protected VarWORD');
+
+TEST_FINISHED();
+~~~
+---
+
+                    
+    This FB tests the free function TEST_FINISHED_NAMED. Calling this function with a name that doesn't exist should
+    produce an error message that says so. This error message should also only be printed once.
+
+
+~~~ST
+FUNCTION_BLOCK FB_TestFinishedNamedDoesNotExist EXTENDS CfUnit.FB_TestSuite
+
+~~~
+~~~ST
+Test_FinishedNamed();
+~~~
+---
+~~~ST
+METHOD Test_FinishedNamed: 
+VAR
+    a: INT;
+    b: INT;
+    bajs: BOOL;
+END_VAR
+
+~~~
+~~~ST
+TEST('Test_FinishedNamed');
+
+AssertEquals_INT(Expected := a,
+                 Actual := b,
+                 Message := 'Values differ');
+
+TEST_FINISHED_NAMED('AnotherTestNameThatDoesNotExist');
+~~~
+---
+~~~ST
+PROGRAM PRG_TEST
+VAR
+    PrimitiveTypes: FB_PrimitiveTypes;
+    AssertTrueFalse: FB_AssertTrueFalse;
+    AssertEveryFailedTestTwice: FB_AssertEveryFailedTestTwice;
+    CreateFourTestsWithSameName: FB_CreateFourTestsWithSameName;
+    ArrayPrimitiveTypes: FB_ArrayPrimitiveTypes;
+    CreateDisabledTest: FB_CreateDisabledTest;
+    AnyPrimitiveTypes: FB_AnyPrimitiveTypes;
+    AssertEveryFailedTestTwiceArrayVersion: FB_AssertEveryFailedTestTwiceArrayVersion;
+    AnyToUnionValue: FB_AnyToUnionValue;
+    MultipleAssertWithSameParametersInSameCycleWithSameTest: FB_MultipleAssertWithSameParametersInSameCycleWithSameTest;
+    MultipleAssertWithSameParametersInDifferentCyclesButWithDifferentTests: FB_MultipleAssertWithSameParametersInDifferentCyclesButWithDifferentTests;
+    MultipleAssertWithSameParametersInDifferentCyclesAndInSameTest: FB_MultipleAssertWithSameParametersInDifferentCyclesAndInSameTest;
+    AdjustAssertFailureMessageToMax252CharLengthTest: FB_AdjustAssertFailureMessageToMax252CharLengthTest;
+    EmptyTestSuite: FB_EmptyTestSuite;
+    CheckIfSpecificTestIsFinished: FB_CheckIfSpecificTestIsFinished;
+    WriteProtectedFunctions: FB_WriteProtectedFunctions;
+    TestFinishedNamed: FB_TestFinishedNamed;
+END_VAR
+
+~~~
+~~~ST
+CfUnit.RUN();
+~~~