From c07c5d712a570bf05718d0ce524f5a5edb42c417 Mon Sep 17 00:00:00 2001 From: Sun Serega Date: Sun, 3 Dec 2023 23:11:58 +0200 Subject: [PATCH 1/3] more range tests --- TestSuite/IntRange comb.pas | 8 -------- TestSuite/IntRangeFirst.pas | 5 ----- TestSuite/RangeT =.pas | 13 +++++++++++++ TestSuite/RangeT comb.pas | 16 ++++++++++++++++ TestSuite/RangeT contents.pas | 8 ++++++++ TestSuite/RangeT count.pas | 10 ++++++++++ TestSuite/RangeT empty.pas | 13 +++++++++++++ TestSuite/RangeT enmr.pas | 7 +++++++ TestSuite/RangeT first.pas | 3 +++ TestSuite/RangeT in.pas | 21 +++++++++++++++++++++ TestSuite/RangeT tos.pas | 4 ++++ bin/Lib/PABCSystem.pas | 4 ++-- 12 files changed, 97 insertions(+), 15 deletions(-) delete mode 100644 TestSuite/IntRange comb.pas delete mode 100644 TestSuite/IntRangeFirst.pas create mode 100644 TestSuite/RangeT =.pas create mode 100644 TestSuite/RangeT comb.pas create mode 100644 TestSuite/RangeT contents.pas create mode 100644 TestSuite/RangeT count.pas create mode 100644 TestSuite/RangeT empty.pas create mode 100644 TestSuite/RangeT enmr.pas create mode 100644 TestSuite/RangeT first.pas create mode 100644 TestSuite/RangeT in.pas create mode 100644 TestSuite/RangeT tos.pas diff --git a/TestSuite/IntRange comb.pas b/TestSuite/IntRange comb.pas deleted file mode 100644 index 7334dec37..000000000 --- a/TestSuite/IntRange comb.pas +++ /dev/null @@ -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)) -); \ No newline at end of file diff --git a/TestSuite/IntRangeFirst.pas b/TestSuite/IntRangeFirst.pas deleted file mode 100644 index a6ea1bec9..000000000 --- a/TestSuite/IntRangeFirst.pas +++ /dev/null @@ -1,5 +0,0 @@ -begin - var ir := InternalRange(2,5); - - Assert(ir.Take(1).First = 2); -end. \ No newline at end of file diff --git a/TestSuite/RangeT =.pas b/TestSuite/RangeT =.pas new file mode 100644 index 000000000..c214e4e82 --- /dev/null +++ b/TestSuite/RangeT =.pas @@ -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&.ToHashSet ); + +Assert( 2.0..3 in |2..3.0|.ToHashSet ); +Assert( (2.0..3) as object in |2..3.0|.Cast&.ToHashSet ); + +Assert( 'b'..'c' in |'b'..'c'|.ToHashSet ); +Assert( ('b'..'c') as object in |'b'..'c'|.Cast&.ToHashSet ); \ No newline at end of file diff --git a/TestSuite/RangeT comb.pas b/TestSuite/RangeT comb.pas new file mode 100644 index 000000000..eab0551c2 --- /dev/null +++ b/TestSuite/RangeT comb.pas @@ -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)) +); diff --git a/TestSuite/RangeT contents.pas b/TestSuite/RangeT contents.pas new file mode 100644 index 000000000..67c2ad152 --- /dev/null +++ b/TestSuite/RangeT contents.pas @@ -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') ); \ No newline at end of file diff --git a/TestSuite/RangeT count.pas b/TestSuite/RangeT count.pas new file mode 100644 index 000000000..79280ce8d --- /dev/null +++ b/TestSuite/RangeT count.pas @@ -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 ); \ No newline at end of file diff --git a/TestSuite/RangeT empty.pas b/TestSuite/RangeT empty.pas new file mode 100644 index 000000000..7b2086fb1 --- /dev/null +++ b/TestSuite/RangeT empty.pas @@ -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 ); \ No newline at end of file diff --git a/TestSuite/RangeT enmr.pas b/TestSuite/RangeT enmr.pas new file mode 100644 index 000000000..2f35e660c --- /dev/null +++ b/TestSuite/RangeT enmr.pas @@ -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') ); \ No newline at end of file diff --git a/TestSuite/RangeT first.pas b/TestSuite/RangeT first.pas new file mode 100644 index 000000000..791b177aa --- /dev/null +++ b/TestSuite/RangeT first.pas @@ -0,0 +1,3 @@ +## +Assert(InternalRange(2,5).First = 2); +Assert(InternalRange('b','e').First = 'b'); \ No newline at end of file diff --git a/TestSuite/RangeT in.pas b/TestSuite/RangeT in.pas new file mode 100644 index 000000000..7403c4bde --- /dev/null +++ b/TestSuite/RangeT in.pas @@ -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 ); \ No newline at end of file diff --git a/TestSuite/RangeT tos.pas b/TestSuite/RangeT tos.pas new file mode 100644 index 000000000..2db9e6173 --- /dev/null +++ b/TestSuite/RangeT tos.pas @@ -0,0 +1,4 @@ +## +Assert( $'{2..3}' = '2..3' ); +Assert( $'{2.0..3}' = '2..3' ); +Assert( $'{''b''..''c''}' = '''b''..''c''' ); \ No newline at end of file diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index 1d094b308..092f0ccdc 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -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}'; From 71535a9af1bc958ca8d1a6edd24c6997b3227c80 Mon Sep 17 00:00:00 2001 From: Sun Serega Date: Mon, 4 Dec 2023 10:06:17 +0200 Subject: [PATCH 2/3] revert `RealRange.IsEmpty` --- TestSuite/RangeT empty.pas | 2 +- TestSuite/RangeT in.pas | 4 +++- bin/Lib/PABCSystem.pas | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/TestSuite/RangeT empty.pas b/TestSuite/RangeT empty.pas index 7b2086fb1..b78e15deb 100644 --- a/TestSuite/RangeT empty.pas +++ b/TestSuite/RangeT empty.pas @@ -8,6 +8,6 @@ Assert( ('b'..'b').IsEmpty = false ); Assert( ('b'..'c').IsEmpty = false ); Assert( ('c'..'b').IsEmpty = true ); -Assert( (2.0..2).IsEmpty = true ); +Assert( (2.0..2).IsEmpty = false ); Assert( (2.0..3).IsEmpty = false ); Assert( (3.0..2).IsEmpty = true ); \ No newline at end of file diff --git a/TestSuite/RangeT in.pas b/TestSuite/RangeT in.pas index 7403c4bde..fa0862cbe 100644 --- a/TestSuite/RangeT in.pas +++ b/TestSuite/RangeT in.pas @@ -18,4 +18,6 @@ Assert( 1 not in rr ); Assert( 2 in rr ); Assert( 2.5 in rr ); Assert( 3 in rr ); -Assert( 4 not in rr ); \ No newline at end of file +Assert( 4 not in rr ); + +Assert( 2 in 2.0..2 ); \ No newline at end of file diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index 092f0ccdc..429ceadf7 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -786,7 +786,7 @@ type end; /// Возвращает True если диапазон пуст - function IsEmpty: boolean := l>=h; + function IsEmpty: boolean := l>h; function ToString: string; override := $'{l}..{h}'; From 19f968c03561e7fe1a7abbcf2fd57cdfdad5f907 Mon Sep 17 00:00:00 2001 From: Sun Serega Date: Mon, 4 Dec 2023 21:57:53 +0200 Subject: [PATCH 3/3] revert RealRange.Size --- TestSuite/RangeT count.pas | 2 +- bin/Lib/PABCSystem.pas | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/TestSuite/RangeT count.pas b/TestSuite/RangeT count.pas index 79280ce8d..a21a634e7 100644 --- a/TestSuite/RangeT count.pas +++ b/TestSuite/RangeT count.pas @@ -7,4 +7,4 @@ Assert( ('b'..'c').Count = 2 ); Assert( ('c'..'b').Count = 0 ); Assert( (2.0..3).Size = 1 ); -Assert( (3.0..2).Size = 0 ); \ No newline at end of file +Assert( (3.0..2).Size = -1 ); \ No newline at end of file diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index 429ceadf7..1d094b308 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -769,7 +769,7 @@ type property Low: real read l; property High: real read h; - property Size: real read System.Math.Max(0, h-l); + property Size: real read h-l; static function operator in(x: real; r: RealRange): boolean := (x >= r.l) and (x <= r.h);