more range tests

This commit is contained in:
Sun Serega 2023-12-03 23:11:58 +02:00
parent 2614677a69
commit c07c5d712a
12 changed files with 97 additions and 15 deletions

View file

@ -1,8 +0,0 @@
##
var r := 2..3;
Assert(
r.Cartesian(2)
// .Println
.ZipTuple(||2,2|,|2,3|,|3,2|,|3,3||)
.All(\(a,b)->a.SequenceEqual(b))
);

View file

@ -1,5 +0,0 @@
begin
var ir := InternalRange(2,5);
Assert(ir.Take(1).First = 2);
end.

13
TestSuite/RangeT =.pas Normal file
View file

@ -0,0 +1,13 @@
##
Assert( 2..3 = 2..3 );
Assert( 2.0..3 = 2..3.0 );
Assert( 'b'..'c' = 'b'..'c' );
Assert( 2..3 in |2..3|.ToHashSet );
Assert( (2..3) as object in |2..3|.Cast&<object>.ToHashSet );
Assert( 2.0..3 in |2..3.0|.ToHashSet );
Assert( (2.0..3) as object in |2..3.0|.Cast&<object>.ToHashSet );
Assert( 'b'..'c' in |'b'..'c'|.ToHashSet );
Assert( ('b'..'c') as object in |'b'..'c'|.Cast&<object>.ToHashSet );

16
TestSuite/RangeT comb.pas Normal file
View file

@ -0,0 +1,16 @@
##
var r := 2..3;
Assert(
r.Cartesian(2)
// .Println
.ZipTuple(||2,2|,|2,3|,|3,2|,|3,3||)
.All(\(a,b)->a.SequenceEqual(b))
);
var r2 := 'b'..'c';
Assert(
r2.Cartesian(2)
// .Println
.ZipTuple(|'bb','bc','cb','cc'|)
.All(\(a,b)->a.SequenceEqual(b))
);

View file

@ -0,0 +1,8 @@
## var r := 2..3;
Assert( r.SequenceEqual(|2,3|) );
Assert( r.ToArray.SequenceEqual(|2,3|) );
Assert( r.AsEnumerable.ToArray.SequenceEqual(|2,3|) );
var r2 := 'b'..'c';
Assert( r2.SequenceEqual('bc') );
Assert( r2.ToArray.SequenceEqual('bc') );
Assert( r2.AsEnumerable.ToArray.SequenceEqual('bc') );

View file

@ -0,0 +1,10 @@
##
Assert( (2..3).Count = 2 );
Assert( (3..2).Count = 0 );
Assert( ('b'..'c').Count = 2 );
Assert( ('c'..'b').Count = 0 );
Assert( (2.0..3).Size = 1 );
Assert( (3.0..2).Size = 0 );

View file

@ -0,0 +1,13 @@
##
Assert( (2..2).IsEmpty = false );
Assert( (2..3).IsEmpty = false );
Assert( (3..2).IsEmpty = true );
Assert( ('b'..'b').IsEmpty = false );
Assert( ('b'..'c').IsEmpty = false );
Assert( ('c'..'b').IsEmpty = true );
Assert( (2.0..2).IsEmpty = true );
Assert( (2.0..3).IsEmpty = false );
Assert( (3.0..2).IsEmpty = true );

View file

@ -0,0 +1,7 @@
##
Assert( (2..4).Step(2).SequenceEqual(|2,4|) );
Assert( ('b'..'d').Step(2).SequenceEqual('bd') );
Assert( (2..3).Reverse.SequenceEqual(|3,2|) );
Assert( ('b'..'c').Reverse.SequenceEqual('cb') );

View file

@ -0,0 +1,3 @@
##
Assert(InternalRange(2,5).First = 2);
Assert(InternalRange('b','e').First = 'b');

21
TestSuite/RangeT in.pas Normal file
View file

@ -0,0 +1,21 @@
##
var ri := 2..3;
Assert( 1 not in ri );
Assert( 2 in ri );
Assert( 2.5 in ri );
Assert( 3 in ri );
Assert( 4 not in ri );
var rc := 'b'..'c';
Assert( 'a' not in rc );
Assert( 'b' in rc );
Assert( 'c' in rc );
Assert( 'd' not in rc );
var rr := 2.0..3;
Assert( 1 not in rr );
Assert( 2 in rr );
Assert( 2.5 in rr );
Assert( 3 in rr );
Assert( 4 not in rr );

4
TestSuite/RangeT tos.pas Normal file
View file

@ -0,0 +1,4 @@
##
Assert( $'{2..3}' = '2..3' );
Assert( $'{2.0..3}' = '2..3' );
Assert( $'{''b''..''c''}' = '''b''..''c''' );

View file

@ -769,7 +769,7 @@ type
property Low: real read l;
property High: real read h;
property Size: real read h-l;
property Size: real read System.Math.Max(0, h-l);
static function operator in(x: real; r: RealRange): boolean := (x >= r.l) and (x <= r.h);
@ -786,7 +786,7 @@ type
end;
/// Возвращает True если диапазон пуст
function IsEmpty: boolean := l>h;
function IsEmpty: boolean := l>=h;
function ToString: string; override := $'{l}..{h}';