charts.lines: fix edge cases for fix-left-chunk and fix-right-chunk

char-rename
Alexander Iljin 2017-01-22 02:34:29 +03:00 committed by John Benediktsson
parent 42e0224258
commit ce403e1f75
2 changed files with 12 additions and 4 deletions

View File

@ -79,6 +79,8 @@ IN: charts.lines.tests
-3 3 fix-left-chunk -3 3 fix-left-chunk
] unit-test ] 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 ! fix-right-chunk: y coord = top limit
{ {
{ { 5 3 } { 6 0 } } { { 5 3 } { 6 0 } }
@ -192,8 +194,8 @@ IN: charts.lines.tests
! single-element sequences, same x coord ! single-element sequences, same x coord
{ {
{ {
{ { 0 0 } } { { 0 0 } { 0 3 } }
{ { 0 3 } } { { 0 3 } { 0 0 } }
} }
} [ } [
{ { 0 -2 } { 0 0 } { 0 5 } { 0 3 } { 0 -1 } } { 0 3 } { { 0 -2 } { 0 0 } { 0 5 } { 0 3 } { 0 -1 } } { 0 3 }

View File

@ -127,7 +127,10 @@ ALIAS: y second
:: fix-left-chunk ( left right ymin ymax -- left' ) :: fix-left-chunk ( left right ymin ymax -- left' )
left last :> left-point left last :> left-point
right first :> right-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
] [ ] [
left-point y right-point y > ymin ymax ? :> y-coord 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' ) :: fix-right-chunk ( left right ymin ymax -- right' )
left last :> left-point left last :> left-point
right first :> right-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 right
] [ ] [
left-point y right-point y < ymin ymax ? :> y-coord left-point y right-point y < ymin ymax ? :> y-coord