TDataValue as new global variant type

This commit is contained in:
Michael Schimmel
2025-09-12 11:18:32 +02:00
parent 695e854cc3
commit 646ffe92bb
15 changed files with 763 additions and 725 deletions
+13 -11
View File
@@ -4,7 +4,7 @@ interface
uses
System.SysUtils,
Myc.Data.POD,
Myc.Data.Scalar,
Myc.Data.Decimal,
Myc.Data.Series,
DUnitX.TestFramework;
@@ -30,8 +30,8 @@ type
[TestCase('BooleanTrue', 'True,skBoolean')]
[TestCase('BooleanFalse', 'False,skBoolean')]
[TestCase('Char', 'Z,skChar')]
[TestCase('String', 'Hello World,skString')]
[TestCase('StringTruncated', 'This string is definitely longer than 15 chars,skString')]
[TestCase('String', 'Hello W,skString')] // Max 7 chars
[TestCase('StringTruncated', 'This string is definitely longer than 7 chars,skString')]
procedure TestScalarCreation(const AValueStr: string; AExpectedKind: TScalarKind);
[Test]
@@ -226,13 +226,15 @@ var
begin
// 1. Create a definition
recDef :=
[
TScalarRecordField.Create('ID', skInt64),
TScalarRecordField.Create('Name', skString),
TScalarRecordField.Create('Price', skDecimal)
];
Assert.AreEqual(Int64(3), Length(recDef), 'Record definition field count mismatch');
Assert.AreEqual('Name', recDef[1].Name, 'Record definition field name mismatch');
TScalarRecordDefinition.Create(
[
TScalarRecordField.Create('ID', skInt64),
TScalarRecordField.Create('Name', skString),
TScalarRecordField.Create('Price', skDecimal)
]
);
Assert.AreEqual(Int64(3), Length(recDef.Fields), 'Record definition field count mismatch');
Assert.AreEqual('Name', recDef.Fields[1].Name, 'Record definition field name mismatch');
// 2. Create a matching set of values
values := [TScalar.FromInt64(99).Value, TScalar.FromString('Product').Value, TScalar.FromDecimal(TDecimal.Create(1995, 2)).Value];
@@ -286,7 +288,7 @@ var
retrievedRec: TScalarRecord;
begin
// 1. Define the structure of the records in the series
recDef := [TScalarRecordField.Create('ID', skInt64), TScalarRecordField.Create('Price', skDecimal)];
recDef := TScalarRecordDefinition.Create([TScalarRecordField.Create('ID', skInt64), TScalarRecordField.Create('Price', skDecimal)]);
// 2. Create the series with the definition
series := TScalarRecordSeries.Create(recDef);