Comparing Structurers in ATEasy (Q200172)
|
|
|
|
Summary:
|
This article demonstrates a simple procedure for comparing struct fields. |
|
|
|
Programming languages typically do not support structure comparison directly. In ATEasy, structures can be compared by converting them to a Variant and then comparing the variants. In ATEasy, when a structure is assigned to a variant, the structure is converted to an array of variant data types, where each field of the structure becomes an element in the array.
A generic structure comparison procedure can be coded as follows:
Procedure CompareStructs(vrStruct1, vrStruct2): Bool ! Compare structs of the same type, return TRUE if equal, FALSE otherwise -------------------------------------------------------------------------------- vrStruct1: Val Variant vrStruct2: Val Variant i: Long { ! Must have the same number of fields If VarDimSize(vrStruct1, 0)<> VarDimSize(vrStruct2, 0) Then Return FALSE
! Compare each element/field For i=0 To VarDimSize(vrStruct1, 0)-1 ! Test if element is another array/structure If VarDimSize(vrStruct1[i], 0) ! Re-call CompareStructs() procedure Return CompareStructs(vrStruct1[i],vrStruct2[i]) Else ! Test for same data type If VarType(vrStruct1[i])<>VarType(vrStruct2[i]) Then Return FALSE ! Test for same value If vrStruct1[i]<>vrStruct2[i] Then Return FALSE EndIf Next
! structs are equal Return TRUE } |
Following are example tests to compare two structs of the same type with both Pass and Fail results, and two nested structures with both Pass and Fail results:
Types ================================================================================ strTest: Struct { Field1: Long Field2: Long Field3: String }
strTest2: Struct { Field1: String Field2: strTest } ================================================================================
Variables ================================================================================ st1: strTest st2: strTest nst1: strTest2 nst2: strTest2 ================================================================================
Tests ================================================================================ Task 1 : "Test Compare Structs" --------------------------------------------------------------------------------
Test 1.1 : "Struct Compare" -------------------------------------------------------------------------------- Type = Precise Value = -1 { st1.Field1=1 st1.Field2=2 st1.Field3="123" st2.Field1=1 st2.Field2=2 st2.Field3="123" TestResult=CompareStructs(st1,st2) }
Test 1.2 : "Struct Not Compare" -------------------------------------------------------------------------------- Type = Precise Value = -1 { st1.Field1=1 st1.Field2=2 st1.Field3="123" st2.Field1=1 st2.Field2=2 st2.Field3="132" TestResult=CompareStructs(st1,st2) }
Task 2 : "Test Compare Nested Structs" --------------------------------------------------------------------------------
Test 2.1 : "Struct Compare" -------------------------------------------------------------------------------- Type = Precise Value = -1 { nst1.Field1="Test" nst1.Field2.Field1=1 nst1.Field2.Field2=2 nst1.Field2.Field3="123" nst2.Field1="Test" nst2.Field2.Field1=1 nst2.Field2.Field2=2 nst2.Field2.Field3="123" TestResult=CompareStructs(nst1,nst2) }
Test 2.2 : "Struct Not Compare" -------------------------------------------------------------------------------- Type = Precise Value = -1 { nst1.Field1="Test" nst1.Field2.Field1=1 nst1.Field2.Field2=2 nst1.Field2.Field3="123" nst2.Field1="Test" nst2.Field2.Field1=1 nst2.Field2.Field2=2 nst2.Field2.Field3="132" TestResult=CompareStructs(nst1,nst2) } |
Running the Task/Test programs produces the following results:
Test Log Results:
Task 1 : Test Compare Structs ------------------------------------------
# Test Name Pin Unit Value Result Status --- ------------------ ------ ------ ---------- ---------- ------ 001 Struct Compare - - -1.0000 -1.0000 Pass 002 Struct Not Compare - - -1.0000 +0.0000 Fail*
Task 2 : Test Compare Structs ------------------------------------------
# Test Name Pin Unit Value Result Status --- ------------------ ------ ------ ---------- ---------- ------ 001 Struct Compare - - -1.0000 -1.0000 Pass 002 Struct Not Compare - - -1.0000 +0.0000 Fail* |
|
|
|
Article Date: |
2/1/2010 12:43:15 PM |
|
Keywords:
|
Struct, Compare Structures, ATEasy |
|
|
|
|
|
|
|
|