diff --git a/libs/math/rectangles/rectangles-tests.factor b/libs/math/rectangles/rectangles-tests.factor index 68dad47fb3..d7c6c09e93 100644 --- a/libs/math/rectangles/rectangles-tests.factor +++ b/libs/math/rectangles/rectangles-tests.factor @@ -2,39 +2,39 @@ USING: tools.test math.rectangles prettyprint io.streams.string kernel accessors ; in: math.rectangles.tests -{ RECT: { 10 10 } { 20 20 } ; } +{ rect{ { 10 10 } { 20 20 } } } [ - RECT: { 10 10 } { 50 50 } ; - RECT: { -10 -10 } { 40 40 } ; + rect{ { 10 10 } { 50 50 } } + rect{ { -10 -10 } { 40 40 } } rect-intersect ] unit-test -{ RECT: { 200 200 } { 0 0 } ; } +{ rect{ { 200 200 } { 0 0 } } } [ - RECT: { 100 100 } { 50 50 } ; - RECT: { 200 200 } { 40 40 } ; + rect{ { 100 100 } { 50 50 } } + rect{ { 200 200 } { 40 40 } } rect-intersect ] unit-test { f } [ - RECT: { 100 100 } { 50 50 } ; - RECT: { 200 200 } { 40 40 } ; + rect{ { 100 100 } { 50 50 } } + rect{ { 200 200 } { 40 40 } } contains-rect? ] unit-test { t } [ - RECT: { 100 100 } { 50 50 } ; - RECT: { 120 120 } { 40 40 } ; + rect{ { 100 100 } { 50 50 } } + rect{ { 120 120 } { 40 40 } } contains-rect? ] unit-test { f } [ - RECT: { 1000 100 } { 50 50 } ; - RECT: { 120 120 } { 40 40 } ; + rect{ { 1000 100 } { 50 50 } } + rect{ { 120 120 } { 40 40 } } contains-rect? ] unit-test -{ RECT: { 10 20 } { 20 20 } ; } [ +{ rect{ { 10 20 } { 20 20 } } } [ { { 20 20 } { 10 40 } @@ -42,5 +42,5 @@ in: math.rectangles.tests } rect-containing ] unit-test -! Prettyprint for RECT: didn't do nesting check properly -{ } [ [ RECT: f f ; dup >>dim . ] with-string-writer drop ] unit-test +! Prettyprint for rect{ didn't do nesting check properly +{ } [ [ rect{ { 1 2 } { 3 4 } } dup >>dim . ] with-string-writer drop ] unit-test diff --git a/libs/math/rectangles/rectangles.factor b/libs/math/rectangles/rectangles.factor index 0ba4d85c0e..fa6e5504d9 100644 --- a/libs/math/rectangles/rectangles.factor +++ b/libs/math/rectangles/rectangles.factor @@ -1,14 +1,19 @@ ! Copyright (C) 2008, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel arrays sequences math math.vectors accessors -parser lexer ; +USING: accessors arrays combinators.short-circuit kernel lexer +math math.vectors parser sequences ; in: math.rectangles TUPLE: rect { loc initial: { 0 0 } } { dim initial: { 0 0 } } ; : ( loc dim -- rect ) rect boa ; inline -SYNTAX: \ RECT: scan-object scan-object ";" expect suffix! ; +ERROR: bad-rectangle object ; + +: ensure-rect-shape ( obj -- obj ) + dup { [ sequence? ] [ length 2 = ] [ first2 [ length 2 = ] bi@ and ] } 1&& [ bad-rectangle ] unless ; + +SYNTAX: \ rect{ \ } [ ensure-rect-shape first2 ] parse-literal ; : ( -- rect ) rect new ; inline