From ce403e1f75f9b8de6153d13eaf7796a07883e113 Mon Sep 17 00:00:00 2001 From: Alexander Iljin Date: Sun, 22 Jan 2017 02:34:29 +0300 Subject: [PATCH] charts.lines: fix edge cases for fix-left-chunk and fix-right-chunk --- lines/lines-tests.factor | 6 ++++-- lines/lines.factor | 10 ++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lines/lines-tests.factor b/lines/lines-tests.factor index 670322e82f..b8214f45ed 100644 --- a/lines/lines-tests.factor +++ b/lines/lines-tests.factor @@ -79,6 +79,8 @@ IN: charts.lines.tests -3 3 fix-left-chunk ] unit-test +! TODO: add more tests for the recently discovered bugs in fix-left-chunk and fix-right-chunk + ! fix-right-chunk: y coord = top limit { { { 5 3 } { 6 0 } } @@ -192,8 +194,8 @@ IN: charts.lines.tests ! single-element sequences, same x coord { { - { { 0 0 } } - { { 0 3 } } + { { 0 0 } { 0 3 } } + { { 0 3 } { 0 0 } } } } [ { { 0 -2 } { 0 0 } { 0 5 } { 0 3 } { 0 -1 } } { 0 3 } diff --git a/lines/lines.factor b/lines/lines.factor index 9edb0029b6..644f5fe22f 100644 --- a/lines/lines.factor +++ b/lines/lines.factor @@ -127,7 +127,10 @@ ALIAS: y second :: fix-left-chunk ( left right ymin ymax -- left' ) left last :> left-point right first :> right-point - left-point y { [ ymin = ] [ ymax = ] } 1|| [ + left-point y right-point y { + [ { [ drop ymin = ] [ > ] } 2&& ] + [ { [ drop ymax = ] [ < ] } 2&& ] + } 2|| [ left ] [ left-point y right-point y > ymin ymax ? :> y-coord @@ -143,7 +146,10 @@ ALIAS: y second :: fix-right-chunk ( left right ymin ymax -- right' ) left last :> left-point right first :> right-point - right-point y { [ ymin = ] [ ymax = ] } 1|| [ + left-point y right-point y { + [ { [ ymin = nip ] [ < ] } 2&& ] + [ { [ ymax = nip ] [ > ] } 2&& ] + } 2|| [ right ] [ left-point y right-point y < ymin ymax ? :> y-coord