Fix in Upvalue-Logic

This commit is contained in:
Michael Schimmel
2025-09-18 20:11:12 +02:00
parent 5f110e4408
commit d12c6c966c
12 changed files with 819 additions and 96 deletions
-72
View File
@@ -48,11 +48,6 @@ type
procedure TestScalarTuple;
[Test]
procedure TestScalarRecordAndDefinition;
[Test]
procedure TestScalarSeries;
[Test]
procedure TestScalarRecordSeries;
end;
implementation
@@ -254,73 +249,6 @@ begin
);
end;
procedure TTestPOD.TestScalarSeries;
var
seriesData: TArray<TScalarValue>;
series: TSeries<TScalarValue>;
scalarSeries: TScalarSeries;
begin
seriesData :=
[
TScalar.FromDouble(101.5).Value,
TScalar.FromDouble(102.0).Value,
TScalar.FromDouble(101.8).Value,
TScalar.FromDouble(103.2).Value
];
series := TSeries<TScalarValue>.CreateFromArray(seriesData, -1);
scalarSeries := TScalarSeries.Create(skDouble, series);
Assert.AreEqual(skDouble, scalarSeries.Kind, 'Series kind mismatch');
Assert.AreEqual(4, scalarSeries.Items.Count, 'Series count mismatch');
Assert.AreEqual(Int64(4), scalarSeries.Items.TotalCount, 'Series total count mismatch');
// TSeries index is reversed: 0 is the last item
Assert.AreEqual(103.2, scalarSeries.Items[0].AsDouble, 1E-12, 'Series item [0] mismatch');
Assert.AreEqual(101.5, scalarSeries.Items[3].AsDouble, 1E-12, 'Series item [3] mismatch');
end;
procedure TTestPOD.TestScalarRecordSeries;
var
recDef: TScalarRecordDefinition;
series: TScalarRecordSeries;
rec1, rec2, rec3: TScalarRecord;
retrievedRec: TScalarRecord;
begin
// 1. Define the structure of the records in the series
recDef := TScalarRecordDefinition.Create([TScalarRecordField.Create('ID', skInt64), TScalarRecordField.Create('Price', skDecimal)]);
// 2. Create the series with the definition
series := TScalarRecordSeries.Create(recDef);
Assert.AreEqual(Int64(0), series.TotalCount, 'Initial series should be empty');
// 3. Create some records
rec1 := TScalarRecord.Create(recDef, [TScalarValue.FromInt64(1), TScalarValue.FromDecimal(TDecimal.Create(100, 2))]);
rec2 := TScalarRecord.Create(recDef, [TScalarValue.FromInt64(2), TScalarValue.FromDecimal(TDecimal.Create(101, 2))]);
rec3 := TScalarRecord.Create(recDef, [TScalarValue.FromInt64(3), TScalarValue.FromDecimal(TDecimal.Create(102, 2))]);
// 4. Add records to the series
series.Add(rec1);
series.Add(rec2);
series.Add(rec3);
// 5. Verify the state of the series
Assert.AreEqual(Int64(3), series.TotalCount, 'Series total count mismatch after adding items');
// 6. Check items. Index 0 is the last added item.
retrievedRec := series.Items[0]; // Should be rec3
Assert.AreEqual(skInt64, retrievedRec['ID'].Kind, 'Item[0] ID kind mismatch');
Assert.AreEqual(Int64(3), retrievedRec['ID'].Value.AsInt64, 'Item[0] ID value mismatch');
Assert.AreEqual(TDecimal.Create(102, 2), retrievedRec['Price'].Value.AsDecimal, 'Item[0] Price value mismatch');
retrievedRec := series.Items[1]; // Should be rec2
Assert.AreEqual(Int64(2), retrievedRec.Items['ID'].Value.AsInt64, 'Item[1] ID value mismatch');
retrievedRec := series.Items[2]; // Should be rec1
Assert.AreEqual(Int64(1), retrievedRec.Items['ID'].Value.AsInt64, 'Item[2] ID value mismatch');
Assert.AreEqual(TDecimal.Create(100, 2), retrievedRec.Items['Price'].Value.AsDecimal, 'Item[2] Price value mismatch');
end;
initialization
FormatSettings.DecimalSeparator := '.';
TDUnitX.RegisterTestFixture(TTestPOD);