math.vectors: Don't use macro with locals and cond in vif. Stack-checker/locals/macros/smart-combinators all need some work (a rewrite?), but meanwhile don't let it get in the way. Add tests.
parent
2ab5607670
commit
fb60673840
|
@ -34,3 +34,16 @@ SPECIALIZED-ARRAY: int
|
|||
[ -1 ] [ { C{ 0 1 } } dup v. ] unit-test
|
||||
|
||||
[ 1 ] [ { C{ 0 1 } } dup h. ] unit-test
|
||||
|
||||
|
||||
{ { 1 2 3 } } [
|
||||
{ t t t } [ { 1 2 3 } ] [ { 4 5 6 } ] vif
|
||||
] unit-test
|
||||
|
||||
{ { 4 5 6 } } [
|
||||
{ f f f } [ { 1 2 3 } ] [ { 4 5 6 } ] vif
|
||||
] unit-test
|
||||
|
||||
{ { 1 5 3 } } [
|
||||
{ t f t } [ { 1 2 3 } ] [ { 4 5 6 } ] vif
|
||||
] unit-test
|
||||
|
|
|
@ -202,11 +202,11 @@ GENERIC: v? ( mask true false -- result )
|
|||
M: object v?
|
||||
[ vand ] [ vandn ] bi-curry* bi vor ; inline
|
||||
|
||||
:: vif ( mask true-quot: ( -- vector ) false-quot: ( -- vector ) -- result )
|
||||
: vif ( mask true-quot: ( -- vector ) false-quot: ( -- vector ) -- result )
|
||||
{
|
||||
{ [ mask vall? ] [ true-quot call ] }
|
||||
{ [ mask vnone? ] [ false-quot call ] }
|
||||
[ mask true-quot call false-quot call v? ]
|
||||
{ [ pick vall? ] [ drop nip call ] }
|
||||
{ [ pick vnone? ] [ 2nip call ] }
|
||||
[ [ call ] dip call v? ]
|
||||
} cond ; inline
|
||||
|
||||
: vfloor ( u -- v ) [ floor ] map ;
|
||||
|
|
Loading…
Reference in New Issue