Skip to content

Commit 9afccb1

Browse files
committed
TValueHelper.Equals handles comparing values that contain TValue
1 parent 7fd8dca commit 9afccb1

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

Source/Base/Spring.pas

+4
Original file line numberDiff line numberDiff line change
@@ -3473,6 +3473,10 @@ function EqualsRec2Rec(const left, right: TValue): Boolean;
34733473
leftRec, rightRec: Pointer;
34743474
leftValue, rightValue: TValue;
34753475
begin
3476+
if (left.TypeInfo = TypeInfo(TValue)) and (right.TypeInfo = TypeInfo(TValue)) then
3477+
Exit(PValue(left.GetReferenceToRawData).Equals(
3478+
PValue(right.GetReferenceToRawData)^));
3479+
34763480
recordType := left.TypeInfo.RttiType;
34773481
for method in recordType.GetMethods('&op_Equality') do
34783482
begin

Tests/Source/Base/Spring.Tests.Base.pas

+12
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,8 @@ TTestValueHelper = class(TTestCase)
435435
procedure EqualsReturnsTrueForEqualPointers;
436436
procedure EqualsReturnsFalseForUnequalPointers;
437437

438+
procedure EqualsReturnsTrueForEqualTValue;
439+
438440
procedure FromVariantProperlyHandlesVariantArrays;
439441

440442
procedure ConvertStringToIntegerFailsForInvalidString;
@@ -2552,6 +2554,16 @@ procedure TTestValueHelper.EqualsReturnsTrueForEqualPointers;
25522554
DoCheckEquals;
25532555
end;
25542556

2557+
procedure TTestValueHelper.EqualsReturnsTrueForEqualTValue;
2558+
var
2559+
nums: TArray<Integer>;
2560+
begin
2561+
nums := TArray<Integer>.Create(42);
2562+
fSUT := TValue.From(TValue.From(nums));
2563+
fValue := TValue.From(TValue.From(nums));
2564+
DoCheckEquals;
2565+
end;
2566+
25552567
procedure TTestValueHelper.EqualsReturnsTrueForEqualVariantArrayOfVariantArray;
25562568
var
25572569
v1, v2: Variant;

0 commit comments

Comments
 (0)