Skip to content

Commit

Permalink
Treat variants with no data or attributes as an empty variant constan…
Browse files Browse the repository at this point in the history
…t for comparison purposes (#616)
  • Loading branch information
siddhukrs authored and sanmut committed May 14, 2019
1 parent 722209a commit 9cdee8e
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 2 deletions.
16 changes: 14 additions & 2 deletions source/core/Variants.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ bool VariantType::IsNullVariant(VariantTypeRef variant)
return variant == nullptr;
}

bool VariantType::IsNullOrEmptyVariant(VariantTypeRef variant)
{
return variant == nullptr
|| (variant->_underlyingTypeRef->BitEncoding() == kEncoding_None // variant's data is empty
&& IsAttributeMapNullOrEmpty(variant)); // variant's attributes are not set or empty.
}

bool VariantType::IsAttributeMapNullOrEmpty(VariantTypeRef variant)
{
return variant->_attributeMap == nullptr || variant->_attributeMap->size() == 0;
}

VariantTypeRef VariantType::CreateNewVariantFromType(TypeRef inputType)
{
TypeManagerRef tm = THREAD_TADM();
Expand Down Expand Up @@ -491,9 +503,9 @@ bool VariantsAreEqual(VariantTypeRef variantX, VariantTypeRef variantY)
{
DualTypeVisitor visitor;
DualTypeEqual dualTypeEqual;
if (!variantX && !variantY) {
if (VariantType::IsNullOrEmptyVariant(variantX) && VariantType::IsNullOrEmptyVariant(variantY)) {
return true; // Empty variant constant with no attributes are equal
} else if (!variantX || !variantY) {
} else if (VariantType::IsNullOrEmptyVariant(variantX) || VariantType::IsNullOrEmptyVariant(variantY)) {
return false;
}
return visitor.Visit(variantX, variantX->Begin(kPARead), variantY, variantY->Begin(kPARead), dualTypeEqual);
Expand Down
2 changes: 2 additions & 0 deletions source/include/Variants.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ class VariantType : public WrappedType
static VariantTypeRef CreateNewVariantFromVariant(const VariantTypeRef& inputVariant);
static void SetVariantToDataTypeError(TypeRef inputType, TypeRef targetType, TypeRef outputType, void* outputData, ErrorCluster* errPtr);
static bool IsNullVariant(VariantTypeRef variant);
static bool IsNullOrEmptyVariant(VariantTypeRef variant);
static bool IsAttributeMapNullOrEmpty(VariantTypeRef variant);
public:
NIError ClearData(void* pData) override;
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
TestResult_Pass true
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
// Autogenerated Vireo assembly file
// Generated on 05/10/2019 15:48:44
//---------------------------------------------------
//VI Definition: ::Web Server::Interactive::Application::EmptyVariantConstant_SetAndDeleteAttribute_EqualsEmptyVariant.gviweb
define (Application%3A%3AEmptyVariantConstant_SetAndDeleteAttribute_EqualsEmptyVariant%2Egviweb dv(.VirtualInstrument (
Locals: c( // Data Space
e(dv(.String 'Application::EmptyVariantConstant_SetAndDeleteAttribute_EqualsEmptyVariant.gviweb')local0)
ce(dv(.Variant )c1)
ce(dv(.String '123')c2)
ce(dv(.String 'attr')c3)
ce(dv(.Variant )c4)
e(.ErrorCluster local5)
e(.Boolean local6)
e(.Variant local7)
e(.ErrorCluster local8)
e(.Boolean local9)
e(.Variant local10)
e(.Boolean local11)
e(dv(.Boolean false)dataItem_TestResult_Pass)
e(.Boolean local13)
e(.ErrorCluster local14)
e(.Boolean local15)
e(.ErrorCluster local16)
e(.Boolean local17)
ce(dv(.Boolean false)c18)
ce(dv(.Boolean true)c19)
e(.ErrorCluster local20)
e(.Boolean local21)
e(.Int32 local22)
e(.String local23)
e(.ErrorCluster local24)
ce(dv(.Boolean false)c25)
ce(dv(.Boolean true)c26)
e(.ErrorCluster local27)
e(.Boolean local28)
e(.Int32 local29)
e(.String local30)
e(.ErrorCluster local31)
e(.ErrorCluster local32)
e(.ErrorCluster local33)
e(.Boolean local34)
e(.Boolean local35)
e(.ErrorCluster local36)
e(.Occurrence local37)
e(.Boolean local38)
e(.Boolean local39)
e(.ErrorCluster local40)
e(.Occurrence local41)
)
clump(1
Copy(c4 local7)
Copy(local32 local5)
SetVariantAttribute(local7 c3 c2 * local5)
Copy(local33 local8)
DeleteVariantAttribute(local7 c3 * local8)
IsEQ(local7 c1 local11)
Copy(local11 dataItem_TestResult_Pass)
Copy(local8 local14)
Copy(local14.status local15)
Copy(local5 local16)
Copy(local16.status local17)
Trigger(1)
Trigger(2)
Wait(1)
Wait(2)
/* Clump Ended. */ )
clump(1
Perch(3)
Xor(c25 local15 local38)
BranchIfFalse(1 local38)
Xor(c26 local15 local39)
BranchIfFalse(2 local39)
Branch(3)
Perch(1)
Branch(0)
Perch(2)
Copy(local14 local27)
Copy(local27.status local28)
Copy(local27.code local29)
Copy(local27.source local30)
Copy(local40 local31)
JavaScriptInvoke(local41 true * 'LogLabVIEWError' * local28 local29 local30)
Branch(0)
Perch(0)
// Code End
/* Clump Ended. */ )
clump(1
Perch(3)
Xor(c18 local17 local34)
BranchIfFalse(1 local34)
Xor(c19 local17 local35)
BranchIfFalse(2 local35)
Branch(3)
Perch(1)
Branch(0)
Perch(2)
Copy(local16 local20)
Copy(local20.status local21)
Copy(local20.code local22)
Copy(local20.source local23)
Copy(local36 local24)
JavaScriptInvoke(local37 true * 'LogLabVIEWError' * local21 local22 local23)
Branch(0)
Perch(0)
Printf("TestResult_Pass %z\n" dataItem_TestResult_Pass)
// Code End
/* Clump Ended. */ )
)))
enqueue (Application%3A%3AEmptyVariantConstant_SetAndDeleteAttribute_EqualsEmptyVariant%2Egviweb)
//Finished!! :D
1 change: 1 addition & 0 deletions test-it/testList.json
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@
"EggShellError4.via",
"EggShellError5.via",
"EmptyVariantConstant_ComputeEqualsAndNotEquals_ReturnsExpected.via",
"EmptyVariantConstant_SetAndDeleteAttribute_EqualsEmptyVariant.via",
"EnumBasic.via",
"Equals1DArr.via",
"Equals2DArr.via",
Expand Down

0 comments on commit 9cdee8e

Please sign in to comment.