|
@@ -0,0 +1,58 @@
|
|
|
+program tczstreamseek;
|
|
|
+{$MODE OBJFPC}
|
|
|
+{$ASSERTIONS ON}
|
|
|
+
|
|
|
+uses
|
|
|
+ classes,
|
|
|
+ zstream;
|
|
|
+
|
|
|
+const
|
|
|
+ val: Uint32 = $123456;
|
|
|
+ wasError: boolean = False;
|
|
|
+var
|
|
|
+ data: TMemoryStream;
|
|
|
+ comprStream: TCompressionStream;
|
|
|
+ decomprStream: TDecompressionStream;
|
|
|
+begin
|
|
|
+ data := TMemoryStream.Create();
|
|
|
+
|
|
|
+ comprStream := TCompressionStream.Create(clMax, data);
|
|
|
+ comprStream.WriteDWord(val);
|
|
|
+ comprStream.Free;
|
|
|
+
|
|
|
+ data.Seek(0, soFromBeginning);
|
|
|
+
|
|
|
+ decomprStream := TDecompressionStream.Create(data);
|
|
|
+ Assert(decomprStream.ReadDWord() = val);
|
|
|
+ Assert(decomprStream.Position = SizeOf(val));
|
|
|
+
|
|
|
+ decomprStream.Seek(0, soFromBeginning);
|
|
|
+ Assert(decomprStream.Position = 0);
|
|
|
+ Assert(decomprStream.ReadDWord() = val);
|
|
|
+
|
|
|
+ decomprStream.Seek(-SizeOf(val), soFromCurrent);
|
|
|
+ Assert(decomprStream.Position = 0);
|
|
|
+ Assert(decomprStream.ReadDWord() = val);
|
|
|
+
|
|
|
+ wasError := False;
|
|
|
+ decomprStream.Seek(0, soFromBeginning);
|
|
|
+ try
|
|
|
+ decomprStream.Seek(-SizeOf(val), soFromCurrent);
|
|
|
+ except
|
|
|
+ on EDecompressionError do
|
|
|
+ wasError := True;
|
|
|
+ end;
|
|
|
+ assert(wasError);
|
|
|
+
|
|
|
+ decomprStream.Seek(SizeOf(val), soFromBeginning);
|
|
|
+ Assert(decomprStream.Position = SizeOf(val));
|
|
|
+
|
|
|
+ wasError := False;
|
|
|
+ try
|
|
|
+ decomprStream.Seek(40, soFromBeginning);
|
|
|
+ except
|
|
|
+ on EDecompressionError do
|
|
|
+ wasError := True;
|
|
|
+ end;
|
|
|
+ assert(wasError);
|
|
|
+end.
|