summaryrefslogtreecommitdiff
path: root/packages/fcl-sdo
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2014-02-24 09:34:21 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2014-02-24 09:34:21 +0000
commit295bd5f2d5f5d4aa3e1fc6ec8e74f3fedc78f53e (patch)
tree82b01d150cf7ea4f2081a3f387b47cfed0326dad /packages/fcl-sdo
parentc520ea452a723036ef7dee95dc572a1d5085da4d (diff)
downloadfpc-295bd5f2d5f5d4aa3e1fc6ec8e74f3fedc78f53e.tar.gz
* Patch from Inoussa implementing getter/setter for variants (bug ID 25759)
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@26862 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-sdo')
-rw-r--r--packages/fcl-sdo/src/base/sdo_field_imp.pas107
-rw-r--r--packages/fcl-sdo/src/base/sdo_global.inc1
-rw-r--r--packages/fcl-sdo/tests/test_suite/projects/sdo_test_suite_gui.lpi17
-rw-r--r--packages/fcl-sdo/tests/test_suite/test_field_imp.pas1314
4 files changed, 1387 insertions, 52 deletions
diff --git a/packages/fcl-sdo/src/base/sdo_field_imp.pas b/packages/fcl-sdo/src/base/sdo_field_imp.pas
index 63726f048d..f7bfead1f7 100644
--- a/packages/fcl-sdo/src/base/sdo_field_imp.pas
+++ b/packages/fcl-sdo/src/base/sdo_field_imp.pas
@@ -395,7 +395,7 @@ type
const AOffset : PtrUInt;
const AValue : TSDOVariant
); override;
-
+
function getBoolean(
const ABuffer : TSDOFieldBuffer;
const AOffset : PtrUInt
@@ -565,7 +565,7 @@ type
const AOffset : PtrUInt;
const AValue : TSDOVariant
); override;
-
+
function getBoolean(
const ABuffer : TSDOFieldBuffer;
const AOffset : PtrUInt
@@ -670,6 +670,15 @@ type
const ABuffer : TSDOFieldBuffer;
const AOffset : PtrUInt
);override;
+ function getVariant(
+ const ABuffer : TSDOFieldBuffer;
+ const AOffset : PtrUInt
+ ) : TSDOVariant; override;
+ procedure setVariant(
+ const ABuffer : TSDOFieldBuffer;
+ const AOffset : PtrUInt;
+ const AValue : TSDOVariant
+ ); override;
end;
TSDOChangeSummaryField = class(TSDOBaseField,IInterface,ISDOField)
@@ -706,7 +715,7 @@ type
const AOffset : PtrUInt;
const AValue : TSDOVariant
); override;
-
+
function getBoolean(
const ABuffer : TSDOFieldBuffer;
const AOffset : PtrUInt
@@ -793,7 +802,7 @@ type
const AOffset : PtrUInt;
const AValue : TSDOVariant
); override;
-
+
function getBytes(
const ABuffer : TSDOFieldBuffer;
const AOffset : PtrUInt
@@ -1836,7 +1845,7 @@ procedure TSDOBooleanField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
setBoolean(ABuffer,AOffset,AValue);
@@ -1995,7 +2004,7 @@ procedure TSDOIntegerField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
setInteger(ABuffer,AOffset,AValue);
@@ -2200,7 +2209,7 @@ procedure TSDOBaseStringField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
setString(ABuffer,AOffset,AValue);
@@ -2264,6 +2273,17 @@ begin
end;
end;
+function TSDOObjectField.getVariant(
+ const ABuffer: TSDOFieldBuffer;
+ const AOffset: PtrUInt
+) : TSDOVariant;
+begin
+ if isNull(ABuffer,AOffset) then
+ Result := Null
+ else
+ Result := getDataObject(ABuffer,AOffset);
+end;
+
procedure TSDOObjectField.setDataObject(
const ABuffer : TSDOFieldBuffer;
const AOffset : PtrUInt;
@@ -2292,6 +2312,31 @@ begin
objBuffer^^ := AValue;
end;
+procedure TSDOObjectField.setVariant(
+ const ABuffer : TSDOFieldBuffer;
+ const AOffset : PtrUInt;
+ const AValue : TSDOVariant
+);
+var
+ x : IInterface;
+ obj : ISDODataObject;
+begin
+ if VarIsNull(AValue) then begin
+ setNull(ABuffer,AOffset);
+ exit;
+ end;
+ if not VarIsType(AValue,varUnknown) then
+ raise ESDOInvalidConversionException.Create(ClassName);
+ x := AValue;
+ if (x = nil) then begin
+ obj := nil;
+ end else begin
+ if not Supports(x,ISDODataObject,obj) then
+ raise ESDOInvalidConversionException.Create(ClassName);
+ end;
+ setDataObject(ABuffer,AOffset,obj);
+end;
+
procedure TSDOObjectField.setNull(const ABuffer: TSDOFieldBuffer; const AOffset: PtrUInt);
var
rawBuffer : PByte;
@@ -2580,7 +2625,7 @@ procedure TSDOByteField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
setByte(ABuffer,AOffset,AValue);
@@ -2658,10 +2703,10 @@ procedure TSDODateField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
- setDate(ABuffer,AOffset,DateTimeToDateTimeRec(AValue));
+ setDate(ABuffer,AOffset,DateTimeToDateTimeRec(VarToDateTime(AValue)));
end;
{ TSDOCharField }
@@ -2910,16 +2955,11 @@ procedure TSDOCharField.setVariant(
const AOffset: PtrUInt;
const AValue: TSDOVariant
);
-var
- locStr : TSDOString;
begin
- if isNull(ABuffer,AOffset) then begin
+ if VarIsNull(AValue) then begin
setNull(ABuffer,AOffset)
end else begin
- locStr := AValue;
- if IsStrEmpty(locStr) then
- locStr := #0;
- setCharacter(ABuffer,AOffset,locStr[1]);
+ setCharacter(ABuffer,AOffset,AValue);
end;
end;
@@ -3080,7 +3120,7 @@ procedure TSDOLongField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
setLong(ABuffer,AOffset,AValue);
@@ -3245,7 +3285,7 @@ procedure TSDOShortField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
setShort(ABuffer,AOffset,AValue);
@@ -3562,11 +3602,25 @@ procedure TSDOBytesField.setVariant(
const AOffset: PtrUInt;
const AValue: TSDOVariant
);
+var
+ tempValue : TSDOBytes;
+ i, c : Integer;
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) or VarIsEmpty(AValue) then begin
setNull(ABuffer,AOffset)
- else
- setBytes(ABuffer,AOffset,AValue);
+ end else begin
+ if not VarIsArray(AValue) then
+ raise ESDOInvalidConversionException.Create(ClassName);
+ c := VarArrayHighBound(AValue,1) - VarArrayLowBound(AValue,1) + 1;
+ if (c > 0) then begin
+ SetLength(tempValue,c);
+ for i := VarArrayLowBound(AValue,1) to VarArrayHighBound(AValue,1) do
+ tempValue[i] := AValue[i];
+ end else begin
+ tempValue := nil;
+ end;
+ setBytes(ABuffer,AOffset,tempValue);
+ end;
end;
function TSDOCurrencyField.getVariant(
@@ -3586,7 +3640,7 @@ procedure TSDOCurrencyField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
setCurrency(ABuffer,AOffset,AValue);
@@ -3609,7 +3663,7 @@ procedure TSDODoubleField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
setDouble(ABuffer,AOffset,AValue);
@@ -3632,7 +3686,7 @@ procedure TSDOFloatField.setVariant(
const AValue: TSDOVariant
);
begin
- if isNull(ABuffer,AOffset) then
+ if VarIsNull(AValue) then
setNull(ABuffer,AOffset)
else
setFloat(ABuffer,AOffset,AValue);
@@ -3643,5 +3697,6 @@ initialization
finalization
UnprepareMap();
-
+
end.
+
diff --git a/packages/fcl-sdo/src/base/sdo_global.inc b/packages/fcl-sdo/src/base/sdo_global.inc
index 56155d55c0..486e56bb33 100644
--- a/packages/fcl-sdo/src/base/sdo_global.inc
+++ b/packages/fcl-sdo/src/base/sdo_global.inc
@@ -12,6 +12,7 @@
{$IFEND}
{$IFEND}
{$DEFINE USE_INLINE}
+ {$DEFINE CHAR_TO_VARARIANT_ERROR}
{$ELSE}
{$UNDEF HAS_QWORD}
{$UNDEF USE_INLINE}
diff --git a/packages/fcl-sdo/tests/test_suite/projects/sdo_test_suite_gui.lpi b/packages/fcl-sdo/tests/test_suite/projects/sdo_test_suite_gui.lpi
index 9da85783db..38f9ceb24b 100644
--- a/packages/fcl-sdo/tests/test_suite/projects/sdo_test_suite_gui.lpi
+++ b/packages/fcl-sdo/tests/test_suite/projects/sdo_test_suite_gui.lpi
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="9"/>
@@ -118,14 +118,14 @@
</Units>
</ProjectOptions>
<CompilerOptions>
- <Version Value="9"/>
+ <Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="sdo_test_suite_gui"/>
</Target>
<SearchPaths>
- <IncludeFiles Value="..\..\.."/>
- <OtherUnitFiles Value="..;..\..;..\..\..;..\..\..\xsd;..\..\..\rtti_filter"/>
+ <IncludeFiles Value="..\..\..\src\base"/>
+ <OtherUnitFiles Value="..;..\..;..\..\..;..\..\..\src\base"/>
<UnitOutputDirectory Value="obj"/>
</SearchPaths>
<Parsing>
@@ -136,8 +136,13 @@
</Parsing>
<Linking>
<Debugging>
- <GenerateDebugInfo Value="True"/>
+ <DebugInfoType Value="dsStabs"/>
</Debugging>
+ <Options>
+ <Win32>
+ <GraphicApplication Value="True"/>
+ </Win32>
+ </Options>
</Linking>
<Other>
<CompilerMessages>
@@ -166,4 +171,4 @@
</Item4>
</Exceptions>
</Debugging>
-</CONFIG> \ No newline at end of file
+</CONFIG>
diff --git a/packages/fcl-sdo/tests/test_suite/test_field_imp.pas b/packages/fcl-sdo/tests/test_suite/test_field_imp.pas
index 03bb97d68b..9c181b3241 100644
--- a/packages/fcl-sdo/tests/test_suite/test_field_imp.pas
+++ b/packages/fcl-sdo/tests/test_suite/test_field_imp.pas
@@ -42,6 +42,8 @@ type
procedure setShort();
procedure getCharacter();
procedure setCharacter();
+ procedure getVariant();
+ procedure setVariant();
end;
TSDOIntegerField_Test = class(TSDOField_Test)
@@ -62,6 +64,8 @@ type
procedure setShort();
procedure getCharacter();
procedure setCharacter();
+ procedure getVariant();
+ procedure setVariant();
end;
TSDOStringField_Test = class(TSDOField_Test)
@@ -83,6 +87,8 @@ type
procedure setShort();
procedure getCharacter();
procedure setCharacter();
+ procedure getVariant();
+ procedure setVariant();
procedure unset();override;
procedure setNull();override;
@@ -104,6 +110,8 @@ type
procedure setDataObject();
procedure unset();override;
procedure setNull();override;
+ procedure getVariant();
+ procedure setVariant();
end;
TSDOChangeSummaryField_Test = class(TSDOField_Test)
@@ -140,6 +148,8 @@ type
procedure setLong();
procedure getShort();
procedure setShort();
+ procedure getVariant();
+ procedure setVariant();
end;
TSDODateField_Test = class(TSDOField_Test)
@@ -152,6 +162,8 @@ type
procedure setDate();
procedure getString();
procedure setString();
+ procedure getVariant();
+ procedure setVariant();
end;
{$IFDEF HAS_SDO_BYTES}
@@ -159,11 +171,17 @@ type
protected
function Create_Field() : ISDOField;override;
class procedure CleanUpBuffer(var ABuffer : PPSDOBytes);
+ procedure CompareVarToBytes(
+ const ABytes : TSDOBytes;
+ const AVar : Variant
+ );
published
procedure getBytes();
procedure setBytes();
procedure getString();
procedure setString();
+ procedure getVariant();
+ procedure setVariant();
end;
{$ENDIF HAS_SDO_BYTES}
@@ -186,6 +204,8 @@ type
procedure setLong();
procedure getShort();
procedure setShort();
+ procedure getVariant();
+ procedure setVariant();
end;
{$ENDIF HAS_SDO_CHAR}
@@ -202,6 +222,8 @@ type
procedure setFloat();
procedure getString();
procedure setString();
+ procedure getVariant();
+ procedure setVariant();
end;
{$ENDIF HAS_SDO_CURRENCY}
@@ -218,6 +240,8 @@ type
procedure setFloat();
procedure getString();
procedure setString();
+ procedure getVariant();
+ procedure setVariant();
end;
{$ENDIF HAS_SDO_DOUBLE}
@@ -234,6 +258,8 @@ type
procedure setFloat();
procedure getString();
procedure setString();
+ procedure getVariant();
+ procedure setVariant();
end;
{$ENDIF HAS_SDO_FLOAT}
@@ -256,6 +282,8 @@ type
procedure setLong();
procedure getShort();
procedure setShort();
+ procedure getVariant();
+ procedure setVariant();
end;
{$ENDIF HAS_SDO_LONG}
@@ -278,12 +306,15 @@ type
procedure setLong();
procedure getShort();
procedure setShort();
+ procedure getVariant();
+ procedure setVariant();
end;
{$ENDIF HAS_SDO_SHORT}
implementation
uses
+ Variants,
sdo_imp_utils, sdo_datafactory, sdo_changesummary, sdo_date_utils, DateUtils;
const s_URI_1 = 'uri:1'; s_URI_3 = 'uri:3';
@@ -603,6 +634,26 @@ begin
CheckEquals('1',obj.getString(buffer,F_OFFSET));
end;
+procedure TSDOBooleanField_Test.getVariant();
+const F_OFFSET = 0;
+var
+ obj : ISDOField;
+ intVal : DWord;
+ buffer : PByte;
+ v : Variant;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ obj.setBoolean(buffer,F_OFFSET,False);
+ v := obj.getVariant(buffer,F_OFFSET);
+ CheckEquals(False,Boolean(v));
+ obj.setBoolean(buffer,F_OFFSET,True);
+ v := obj.getVariant(buffer,F_OFFSET);
+ CheckEquals(True,Boolean(v));
+end;
+
procedure TSDOBooleanField_Test.setBoolean();
const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
var
@@ -866,6 +917,23 @@ begin
end;
+procedure TSDOBooleanField_Test.setVariant();
+const F_OFFSET = 0;
+var
+ obj : ISDOField;
+ intVal : DWord;
+ buffer : PByte;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ obj.setVariant(buffer,F_OFFSET,False);
+ CheckEquals(False,obj.getBoolean(buffer,F_OFFSET));
+ obj.setVariant(buffer,F_OFFSET,True);
+ CheckEquals(True,obj.getBoolean(buffer,F_OFFSET));
+end;
+
{ TSDOField_Test }
class function TSDOField_Test.GetTestSuitePath: string;
@@ -1624,6 +1692,28 @@ begin
CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
end;
+procedure TSDOIntegerField_Test.getVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOInteger = (-12345,-678,0,1,12,456789);
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setInteger(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ v := obj.getVariant(buffer,F_OFFSET);
+ CheckEquals(SAMPLE_VALUES[i],TSDOInteger(v));
+ end;
+end;
+
procedure TSDOIntegerField_Test.setBoolean();
const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
var
@@ -1964,6 +2054,27 @@ begin
CheckEquals(VAL_2,valBuffer^);
end;
+procedure TSDOIntegerField_Test.setVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOInteger = (-98765,-678,0,1,12,456789);
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ CheckEquals(SAMPLE_VALUES[i],obj.getInteger(buffer,F_OFFSET));
+ end;
+end;
+
{ TSDOStringField_Test }
class procedure TSDOStringField_Test.CleanUpBuffer(var ABuffer : PPSDOString);
@@ -2798,6 +2909,31 @@ begin
end;
end;
+procedure TSDOStringField_Test.getVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..9] of TSDOString = (
+ 'AZERTY', 'QWERTY', 'Service Data Object', 'S', 'D', 'O',
+ 'WEIRD STRING'#0'Sample', #0#0, '0123456789', '#!'
+ );
+var
+ obj : ISDOField;
+ trueBuffer : array[0..200] of Byte;
+ buffer : PByte;
+ i : Integer;
+ v : Variant;
+begin
+ FillChar(trueBuffer,SizeOf(trueBuffer),#0);
+ buffer := @(trueBuffer[0]);
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setString(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ v := obj.getVariant(buffer,F_OFFSET);
+ CheckEquals(SAMPLE_VALUES[i],TSDOString(v));
+ end;
+end;
+
procedure TSDOStringField_Test.setBoolean();
const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
var
@@ -3297,6 +3433,29 @@ begin
valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
end;
+procedure TSDOStringField_Test.setVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..9] of TSDOString = (
+ 'AZERTY', 'QWERTY', 'Service Data Object', 'S', 'D', 'O',
+ 'WEIRD STRING'#0'Sample', #0#0, '0123456789', '#!'
+ );
+var
+ obj : ISDOField;
+ trueBuffer : array[0..200] of Byte;
+ buffer : PByte;
+ i : Integer;
+begin
+ FillChar(trueBuffer,SizeOf(trueBuffer),#0);
+ buffer := @(trueBuffer[0]);
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ CheckEquals(SAMPLE_VALUES[i],obj.getString(buffer,F_OFFSET));
+ end;
+end;
+
procedure TSDOStringField_Test.unset();
const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
@@ -3665,6 +3824,43 @@ begin
end;
end;
+procedure TSDOBaseDataObject_Test.getVariant();
+const
+ F_OFFSET = 0;
+var
+ obj : ISDOField;
+ trueBuffer : array[0..200] of Byte;
+ buffer : PByte;
+ val_array : array[0..2] of ISDODataObject;
+ val_x : ISDODataObject;
+ v : Variant;
+ a : IInterface;
+ ax : ISDODataObject;
+ i : TSDOByte;
+begin
+ FillChar(trueBuffer,SizeOf(trueBuffer),#0);
+ buffer := @(trueBuffer[0]);
+ obj := Create_Field();
+ val_array[0] := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
+ val_array[1] := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
+ val_array[2] := nil;
+
+ for i := Low(val_array) to High(val_array) do begin
+ val_x := val_array[i];
+ obj.setDataObject(buffer,F_OFFSET,val_x);
+ v := obj.getVariant(buffer,F_OFFSET);
+ if (val_x <> nil) then begin
+ Check(VarIsType(v,varUnknown));
+ a := v;
+ Check(Supports(a,ISDODataObject,ax));
+ CheckEquals(PtrUInt(val_x),PtrUInt(ax));
+ end else begin
+ a := v;
+ Check(a = nil);
+ end;
+ end;
+end;
+
procedure TSDOBaseDataObject_Test.setDataObject();
const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
var
@@ -3897,6 +4093,35 @@ begin
FFactory := Create_Factory();
end;
+procedure TSDOBaseDataObject_Test.setVariant();
+const
+ F_OFFSET = 0;
+var
+ obj : ISDOField;
+ trueBuffer : array[0..200] of Byte;
+ buffer : PByte;
+ val_array : array[0..2] of ISDODataObject;
+ val_x : ISDODataObject;
+ v : Variant;
+ a : IInterface;
+ ax : ISDODataObject;
+ i : TSDOByte;
+begin
+ FillChar(trueBuffer,SizeOf(trueBuffer),#0);
+ buffer := @(trueBuffer[0]);
+ obj := Create_Field();
+ val_array[0] := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
+ val_array[1] := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
+ val_array[2] := nil;
+
+ for i := Low(val_array) to High(val_array) do begin
+ val_x := val_array[i];
+ obj.setVariant(buffer,F_OFFSET,val_x);
+ ax := obj.getDataObject(buffer,F_OFFSET);
+ CheckEquals(PtrUInt(val_x),PtrUInt(ax));
+ end;
+end;
+
procedure TSDOBaseDataObject_Test.TearDown;
begin
FFactory := nil;
@@ -5227,6 +5452,27 @@ begin
CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
end;
+procedure TSDOByteField_Test.getVariant();
+const
+ F_OFFSET = 0;
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ v : Variant;
+ i : TSDOByte;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(TSDOByte) to High(TSDOByte) do begin
+ obj.setByte(buffer,F_OFFSET,i);
+ v := obj.getVariant(buffer,F_OFFSET);
+ CheckEquals(i,TSDOByte(v));
+ end;
+end;
+
procedure TSDOByteField_Test.setBoolean();
const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
var
@@ -5567,6 +5813,25 @@ begin
CheckEquals(VAL_2,valBuffer^);
end;
+procedure TSDOByteField_Test.setVariant();
+const
+ F_OFFSET = 0;
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ i : TSDOByte;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(TSDOByte) to High(TSDOByte) do begin
+ obj.setVariant(buffer,F_OFFSET,i);
+ CheckEquals(i,obj.getByte(buffer,F_OFFSET));
+ end;
+end;
+
{ TSDODateField_Test }
procedure TSDODateField_Test.CheckEquals(expected, actual: TSDODate; msg: string; const AStrict : Boolean);
@@ -5807,6 +6072,58 @@ begin
CheckEquals(xsd_DateTimeToStr(VAL_3,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
end;
+procedure TSDODateField_Test.getVariant();
+const F_OFFSET = 0;
+ VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
+ VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
+ VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
+
+ procedure SetConstants();
+ var
+ d : TSDODate;
+ begin
+ FillChar(d,SizeOf(TSDODate),#0);
+ d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
+ d.HourOffset := 5;
+ d.MinuteOffset := 6;
+ PSDODate(@VAL_1)^ := d;
+
+ FillChar(d,SizeOf(TSDODate),#0);
+ d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
+ d.HourOffset := 0;
+ d.MinuteOffset := 13;
+ PSDODate(@VAL_3)^ := d;
+ end;
+
+var
+ obj : ISDOField;
+ trueBuffer : array[0..(3 * SizeOf(TSDODate))] of Byte;
+ buffer : PByte;
+ v : Variant;
+ value : TSDODate;
+ a, b : TDateTime;
+ i : Integer;
+begin
+ SetConstants();
+
+ FillChar(trueBuffer,SizeOf(trueBuffer),#0);
+ buffer := @(trueBuffer[0]);
+ obj := Create_Field();
+
+ for i := 1 to 3 do begin
+ case i of
+ 1 : value := VAL_1;
+ 2 : value := VAL_2;
+ 3 : value := VAL_3;
+ end;
+ obj.setDate(buffer,F_OFFSET,value);
+ v := obj.getVariant(buffer,F_OFFSET);
+ a := v;
+ b := NormalizeToUTC(value);
+ CheckEquals(0,MilliSecondsBetween(a,b));
+ end;
+end;
+
procedure TSDODateField_Test.setDate();
const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
@@ -5947,6 +6264,57 @@ begin
CheckEquals(VAL_2,valBuffer^);
end;
+procedure TSDODateField_Test.setVariant();
+const F_OFFSET = 0;
+ VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
+ VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
+ VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
+
+ procedure SetConstants();
+ var
+ d : TSDODate;
+ begin
+ FillChar(d,SizeOf(TSDODate),#0);
+ d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
+ d.HourOffset := 5;
+ d.MinuteOffset := 6;
+ PSDODate(@VAL_1)^ := d;
+
+ FillChar(d,SizeOf(TSDODate),#0);
+ d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
+ d.HourOffset := 0;
+ d.MinuteOffset := 13;
+ PSDODate(@VAL_3)^ := d;
+ end;
+
+var
+ obj : ISDOField;
+ trueBuffer : array[0..(3 * SizeOf(TSDODate))] of Byte;
+ buffer : PByte;
+ v : Variant;
+ value : TSDODate;
+ a, b : TDateTime;
+ i : Integer;
+begin
+ SetConstants();
+
+ FillChar(trueBuffer,SizeOf(trueBuffer),#0);
+ buffer := @(trueBuffer[0]);
+ obj := Create_Field();
+
+ for i := 1 to 3 do begin
+ case i of
+ 1 : value := VAL_1;
+ 2 : value := VAL_2;
+ 3 : value := VAL_3;
+ end;
+ b := NormalizeToUTC(value);
+ obj.setVariant(buffer,F_OFFSET,b);
+ a := NormalizeToUTC(obj.getDate(buffer,F_OFFSET));
+ CheckEquals(0,MilliSecondsBetween(a,b));
+ end;
+end;
+
{$IFDEF HAS_SDO_CHAR}
{ TSDOCharField_Test }
@@ -6571,6 +6939,30 @@ begin
CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
end;
+procedure TSDOCharField_Test.getVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..2] of TSDOChar = (TSDOChar(#97),TSDOChar(#48),TSDOChar(#100));
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+ a : TSDOChar;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setCharacter(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ v := obj.getVariant(buffer,F_OFFSET);
+ a := v;
+ Check(SAMPLE_VALUES[i] = a);
+ end;
+end;
+
procedure TSDOCharField_Test.setBoolean();
const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
var
@@ -6920,6 +7312,28 @@ begin
CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
CheckEquals(VAL_2,valBuffer^);
end;
+
+procedure TSDOCharField_Test.setVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..2] of TSDOChar = (TSDOChar(#97),TSDOChar(#48),TSDOChar(#100));
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ i : Integer;
+ a : TSDOChar;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ a := obj.getCharacter(buffer,F_OFFSET);
+ CheckEquals(Ord(SAMPLE_VALUES[i]),Ord(a));
+ end;
+end;
{$ENDIF HAS_SDO_CHAR}
{$IFDEF HAS_SDO_LONG}
@@ -7861,6 +8275,51 @@ begin
CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
CheckEquals(VAL_2,valBuffer^);
end;
+
+procedure TSDOLongField_Test.getVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOLong = (-987654321654321,-678,0,1,12,12345678912345);
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+ a : TSDOLong;
+begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setLong(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ v := obj.getVariant(buffer,F_OFFSET);
+ a := v;
+ CheckEquals(SAMPLE_VALUES[i],a);
+ end;
+end;
+
+procedure TSDOLongField_Test.setVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOLong = (-987654321654321,-678,0,1,12,12345678912345);
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ CheckEquals(SAMPLE_VALUES[i],obj.getLong(buffer,F_OFFSET));
+ end;
+end;
{$ENDIF HAS_SDO_LONG}
{$IFDEF HAS_SDO_SHORT}
@@ -8802,6 +9261,51 @@ begin
CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
CheckEquals(VAL_2,valBuffer^);
end;
+
+procedure TSDOShortField_Test.getVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOShort = (-9865,-678,0,1,12,4567);
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+ a : TSDOShort;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setShort(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ v := obj.getVariant(buffer,F_OFFSET);
+ a := v;
+ CheckEquals(SAMPLE_VALUES[i],a);
+ end;
+end;
+
+procedure TSDOShortField_Test.setVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOShort = (-9865,-678,0,1,12,4567);
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ CheckEquals(SAMPLE_VALUES[i],obj.getShort(buffer,F_OFFSET));
+ end;
+end;
{$ENDIF HAS_SDO_SHORT}
{$IFDEF HAS_SDO_BYTES}
@@ -8837,12 +9341,12 @@ var
VAL_1 := v;
v := nil;
- VAL_2 := nil;
+ VAL_2 := nil;
SetLength(v,200);
for k := 0 to High(v) do
v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
- VAL_3 := v;
+ VAL_3 := v;
end;
var
@@ -8874,7 +9378,7 @@ begin
SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
CheckEquals(VAL_1,obj.getBytes(buffer,F_OFFSET_0));
valBuffer^ := nil;
-
+
valBuffer^ := @VAL_2; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
SetBit(attributeBuffer^,BIT_ORDER_SET,False);
SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
@@ -8887,7 +9391,7 @@ begin
SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
CheckEquals(VAL_2,obj.getBytes(buffer,F_OFFSET_0));
valBuffer^ := nil;
-
+
valBuffer^ := @VAL_3; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
SetBit(attributeBuffer^,BIT_ORDER_SET,False);
SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
@@ -8966,7 +9470,7 @@ var
SetLength(v,200);
for k := 0 to High(v) do
v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
- VAL_3 := v;
+ VAL_3 := v;
end;
var
@@ -8974,7 +9478,6 @@ var
trueBuffer : array[0..100] of Byte;
buffer, tmpBuffer, attributeBuffer : PByte;
valBuffer : PPSDOBytes;
- s : TSDOString;
begin
SetConstants();
@@ -9001,14 +9504,12 @@ begin
valBuffer^^ := VAL_2;
SetBit(attributeBuffer^,BIT_ORDER_SET,True);
SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
- s := obj.getString(buffer,F_OFFSET_0);
- CheckEquals(BytesToString(VAL_2),s,'x1');
- //CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0),'1');
+ CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
SetBit(attributeBuffer^,BIT_ORDER_SET,False);
SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
valBuffer^^ := nil;
-
+
valBuffer^^ := VAL_3;
SetBit(attributeBuffer^,BIT_ORDER_SET,False);
SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
@@ -9041,14 +9542,12 @@ begin
valBuffer^^ := VAL_2;
SetBit(attributeBuffer^,BIT_ORDER_SET,True);
SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
- s := obj.getString(buffer,F_OFFSET_0);
- CheckEquals(BytesToString(VAL_2),s);
- //CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
+ CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
SetBit(attributeBuffer^,BIT_ORDER_SET,False);
SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
valBuffer^^ := nil;
-
+
valBuffer^^ := VAL_3;
SetBit(attributeBuffer^,BIT_ORDER_SET,True);
SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
@@ -9079,13 +9578,13 @@ var
v := nil;
VAL_2 := nil;
-
+
SetLength(v,200);
for k := 0 to High(v) do
v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
- VAL_3 := v;
+ VAL_3 := v;
end;
-
+
var
obj : ISDOField;
trueBuffer : array[0..100] of Byte;
@@ -9183,14 +9682,14 @@ var
for k := 0 to High(v) do
v[k] := k mod High(Byte);
VAL_1 := v;
- v := nil;
+ v := nil;
VAL_2 := nil;
SetLength(v,200);
for k := 0 to High(v) do
v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
- VAL_3 := v;
+ VAL_3 := v;
end;
var
@@ -9234,9 +9733,132 @@ begin
CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
CheckEquals(VAL_2,valBuffer^^);
-
+
CleanUpBuffer(valBuffer);
end;
+
+procedure TSDOBytesField_Test.CompareVarToBytes(
+ const ABytes : TSDOBytes;
+ const AVar : Variant
+);
+var
+ i, c, lb : Integer;
+begin
+ if (Length(ABytes) = 0) then
+ Check(
+ ( (VarIsEmpty(AVar) or VarIsNull(AVar)) or
+ (VarIsArray(AVar) and (VarArrayHighBound(AVar,1) < VarArrayLowBound(AVar,1)) )
+ ),
+ 'NULL Bytes'
+ );
+
+ Check(VarIsArray(AVar),'Array expected');
+ c := Length(ABytes);
+ lb := VarArrayLowBound(AVar,1);
+ CheckEquals(c,(VarArrayHighBound(AVar,1)-lb+1),'Array Length');
+ for i := Low(ABytes) to High(ABytes) do
+ CheckEquals(ABytes[i],AVar[lb+i]);
+end;
+
+procedure TSDOBytesField_Test.getVariant();
+const
+ F_OFFSET = 0;
+ ZERO_BYTES : TSDOBytes = nil;
+var
+ VAL_1, VAL_2, VAL_3 : TSDOBytes;
+ SAMPLE_VALUES : array[0..3] of TSDOBytes;
+
+ procedure SetConstants();
+ var
+ v : TSDOBytes;
+ k : Integer;
+ begin
+ SetLength(v,100);
+ for k := 0 to High(v) do
+ v[k] := k mod High(Byte);
+ VAL_1 := v;
+ v := nil;
+
+ VAL_2 := nil;
+
+ SetLength(v,200);
+ for k := 0 to High(v) do
+ v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
+ VAL_3 := v;
+
+ SAMPLE_VALUES[0] := nil;
+ SAMPLE_VALUES[1] := VAL_1;
+ SAMPLE_VALUES[2] := VAL_2;
+ SAMPLE_VALUES[3] := VAL_3;
+ end;
+
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setBytes(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ v := obj.getVariant(buffer,F_OFFSET);
+ CompareVarToBytes(SAMPLE_VALUES[i],v);
+ end;
+end;
+
+procedure TSDOBytesField_Test.setVariant();
+const
+ F_OFFSET = 0;
+ ZERO_BYTES : TSDOBytes = nil;
+var
+ VAL_1, VAL_2, VAL_3 : TSDOBytes;
+ SAMPLE_VALUES : array[0..3] of TSDOBytes;
+
+ procedure SetConstants();
+ var
+ v : TSDOBytes;
+ k : Integer;
+ begin
+ SetLength(v,100);
+ for k := 0 to High(v) do
+ v[k] := k mod High(Byte);
+ VAL_1 := v;
+ v := nil;
+
+ VAL_2 := nil;
+
+ SetLength(v,200);
+ for k := 0 to High(v) do
+ v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
+ VAL_3 := v;
+
+ SAMPLE_VALUES[0] := nil;
+ SAMPLE_VALUES[1] := VAL_1;
+ SAMPLE_VALUES[2] := VAL_2;
+ SAMPLE_VALUES[3] := VAL_3;
+ end;
+
+var
+ obj : ISDOField;
+ intVal : QWord;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+begin
+ intVal := 0;
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ v := SAMPLE_VALUES[i];
+ obj.setVariant(buffer,F_OFFSET,v);
+ CheckEquals(SAMPLE_VALUES[i], obj.getBytes(buffer,F_OFFSET));
+ end;
+end;
{$ENDIF HAS_SDO_BYTES}
{$IFDEF HAS_SDO_CURRENCY}
@@ -9760,6 +10382,28 @@ begin
CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
end;
+procedure TSDOCurrencyField_Test.getVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOCurrency = (-12345.1234,-678.258,0,1,12,456789);
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setCurrency(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ v := obj.getVariant(buffer,F_OFFSET);
+ CheckEquals(SAMPLE_VALUES[i],TSDOCurrency(v));
+ end;
+end;
+
procedure TSDOCurrencyField_Test.setString();
const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
@@ -9802,6 +10446,28 @@ begin
CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
CheckEquals(VAL_2,valBuffer^);
end;
+
+procedure TSDOCurrencyField_Test.setVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOCurrency = (-12345.1234,-678.258,0,1,12,456789);
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer : PByte;
+ value : Variant;
+ i : Integer;
+begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ value := obj.getCurrency(buffer,F_OFFSET);
+ Check((SAMPLE_VALUES[i] = value));
+ end;
+end;
{$ENDIF HAS_SDO_CURRENCY}
{$IFDEF HAS_SDO_DOUBLE}
@@ -9811,13 +10477,117 @@ begin
end;
procedure TSDODoubleField_Test.getCurrency();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -987654; VAL_3 : TSDODouble = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDODouble;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDODouble(tmpBuffer);
+ obj := Create_Field();
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
+
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDODouble(tmpBuffer);
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
+
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
+
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
end;
procedure TSDODoubleField_Test.setCurrency();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -98765; VAL_3 : TSDODouble = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDODouble;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDODouble(tmpBuffer);
+ obj := Create_Field();
+
+ obj.setCurrency(buffer,F_OFFSET_0,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+
+ obj.setCurrency(buffer,F_OFFSET_0,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDODouble(tmpBuffer);
+
+ obj.setCurrency(buffer,F_OFFSET_1,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+
+ obj.setCurrency(buffer,F_OFFSET_1,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
end;
procedure TSDODoubleField_Test.getDouble();
@@ -9969,13 +10739,117 @@ begin
end;
procedure TSDODoubleField_Test.getFloat();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -987654; VAL_3 : TSDODouble = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDODouble;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDODouble(tmpBuffer);
+ obj := Create_Field();
+
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
+
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDODouble(tmpBuffer);
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
+
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
end;
procedure TSDODoubleField_Test.setFloat();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -98765; VAL_3 : TSDODouble = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDODouble;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDODouble(tmpBuffer);
+ obj := Create_Field();
+
+ obj.setFloat(buffer,F_OFFSET_0,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+ obj.setFloat(buffer,F_OFFSET_0,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
+
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDODouble(tmpBuffer);
+
+ obj.setFloat(buffer,F_OFFSET_1,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+
+ obj.setFloat(buffer,F_OFFSET_1,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
end;
procedure TSDODoubleField_Test.getString();
@@ -10091,6 +10965,50 @@ begin
CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
CheckEquals(VAL_2,valBuffer^);
end;
+
+procedure TSDODoubleField_Test.getVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDODouble = (-12345,-678,0,1,12,456789);
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setDouble(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ v := obj.getVariant(buffer,F_OFFSET);
+ CheckEquals(SAMPLE_VALUES[i],TSDODouble(v));
+ end;
+end;
+
+procedure TSDODoubleField_Test.setVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDODouble = (-12345,-678,0,1,12,456789);
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer : PByte;
+ value : Variant;
+ i : Integer;
+begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ value := obj.getDouble(buffer,F_OFFSET);
+ Check((SAMPLE_VALUES[i] = value));
+ end;
+end;
{$ENDIF HAS_SDO_DOUBLE}
{$IFDEF HAS_SDO_FLOAT}
@@ -10100,33 +11018,345 @@ begin
end;
procedure TSDOFloatField_Test.getCurrency();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -987654; VAL_3 : TSDOFloat = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDOFloat;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+ obj := Create_Field();
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
+
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
+
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
+
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
end;
procedure TSDOFloatField_Test.setCurrency();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -98765; VAL_3 : TSDOFloat = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDOFloat;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+ obj := Create_Field();
+
+ obj.setCurrency(buffer,F_OFFSET_0,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+
+ obj.setCurrency(buffer,F_OFFSET_0,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
+
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+
+ obj.setCurrency(buffer,F_OFFSET_1,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+ obj.setCurrency(buffer,F_OFFSET_1,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
end;
procedure TSDOFloatField_Test.getDouble();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -987654; VAL_3 : TSDOFloat = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDOFloat;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+ obj := Create_Field();
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
+
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
+
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
+
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
end;
procedure TSDOFloatField_Test.setDouble();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -98765; VAL_3 : TSDOFloat = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDOFloat;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+ obj := Create_Field();
+
+ obj.setDouble(buffer,F_OFFSET_0,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+ obj.setDouble(buffer,F_OFFSET_0,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
+
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+
+ obj.setDouble(buffer,F_OFFSET_1,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+
+ obj.setDouble(buffer,F_OFFSET_1,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
end;
procedure TSDOFloatField_Test.getFloat();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -987654; VAL_3 : TSDOFloat = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDOFloat;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+ obj := Create_Field();
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
+
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
+
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+ valBuffer^ := VAL_1;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
+
+
+ valBuffer^ := VAL_2;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
+
+ valBuffer^ := VAL_3;
+ SetBit(attributeBuffer^,BIT_ORDER_SET,True);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
+ SetBit(attributeBuffer^,BIT_ORDER_SET,False);
+ SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
+ CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
end;
procedure TSDOFloatField_Test.setFloat();
+const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
+ VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -98765; VAL_3 : TSDOFloat = 0;
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer, tmpBuffer, attributeBuffer : PByte;
+ valBuffer : PSDOFloat;
begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ tmpBuffer := buffer;
+ attributeBuffer := buffer;
+ Inc(tmpBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+ obj := Create_Field();
+
+ obj.setFloat(buffer,F_OFFSET_0,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+
+ obj.setFloat(buffer,F_OFFSET_0,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
+
+ FillChar(intVal,SizeOf(intVal),#0);
+ Inc(tmpBuffer);
+ Inc(attributeBuffer);
+ valBuffer := PSDOFloat(tmpBuffer);
+
+ obj.setFloat(buffer,F_OFFSET_1,VAL_1);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_1,valBuffer^);
+ obj.setFloat(buffer,F_OFFSET_1,VAL_2);
+ CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
+ CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
+ CheckEquals(VAL_2,valBuffer^);
end;
procedure TSDOFloatField_Test.getString();
@@ -10242,6 +11472,50 @@ begin
CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
CheckEquals(VAL_2,valBuffer^);
end;
+
+procedure TSDOFloatField_Test.getVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOFloat = (-12345,-678,0,1,12,456789);
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer : PByte;
+ v : Variant;
+ i : Integer;
+begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setFloat(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ v := obj.getVariant(buffer,F_OFFSET);
+ CheckEquals(SAMPLE_VALUES[i],TSDOFloat(v));
+ end;
+end;
+
+procedure TSDOFloatField_Test.setVariant();
+const
+ F_OFFSET = 0;
+ SAMPLE_VALUES : array[0..5] of TSDOFloat = (-12345,-678,0,1,12,456789);
+var
+ obj : ISDOField;
+ intVal : array[0..100] of Byte;
+ buffer : PByte;
+ value : Variant;
+ i : Integer;
+begin
+ FillChar(intVal,SizeOf(intVal),#0);
+ buffer := @intVal;
+ obj := Create_Field();
+
+ for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
+ obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
+ value := obj.getFloat(buffer,F_OFFSET);
+ Check((SAMPLE_VALUES[i] = value));
+ end;
+end;
{$ENDIF HAS_SDO_FLOAT}
initialization