2007-09-20 18:09:08 -04:00
|
|
|
USING: definitions generic kernel kernel.private math
|
|
|
|
math.constants parser sequences tools.test words assocs
|
|
|
|
namespaces quotations sequences.private classes continuations
|
2008-03-29 04:34:48 -04:00
|
|
|
generic.standard effects classes.tuple classes.tuple.private
|
|
|
|
arrays vectors strings compiler.units accessors classes.algebra
|
2008-04-20 06:15:46 -04:00
|
|
|
calendar prettyprint io.streams.string splitting inspector
|
2008-04-26 03:01:06 -04:00
|
|
|
columns math.order ;
|
2008-03-29 04:34:48 -04:00
|
|
|
IN: classes.tuple.tests
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
TUPLE: rect x y w h ;
|
2008-04-13 16:06:09 -04:00
|
|
|
: <rect> rect boa ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-26 17:38:31 -04:00
|
|
|
: move ( x rect -- rect )
|
|
|
|
[ + ] change-x ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-26 17:38:31 -04:00
|
|
|
[ f ] [ 10 20 30 40 <rect> dup clone 5 swap move = ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-26 17:38:31 -04:00
|
|
|
[ t ] [ 10 20 30 40 <rect> dup clone 0 swap move = ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-26 17:38:31 -04:00
|
|
|
! Make sure we handle tuple class redefinition
|
|
|
|
TUPLE: redefinition-test ;
|
|
|
|
|
|
|
|
C: <redefinition-test> redefinition-test
|
|
|
|
|
|
|
|
<redefinition-test> "redefinition-test" set
|
|
|
|
|
|
|
|
[ t ] [ "redefinition-test" get redefinition-test? ] unit-test
|
|
|
|
|
2008-03-29 04:34:48 -04:00
|
|
|
"IN: classes.tuple.tests TUPLE: redefinition-test ;" eval
|
2008-03-26 17:38:31 -04:00
|
|
|
|
|
|
|
[ t ] [ "redefinition-test" get redefinition-test? ] unit-test
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
! Make sure we handle changing shapes!
|
|
|
|
TUPLE: point x y ;
|
|
|
|
|
|
|
|
C: <point> point
|
|
|
|
|
2008-03-26 17:38:31 -04:00
|
|
|
[ ] [ 100 200 <point> "p" set ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! Use eval to sequence parsing explicitly
|
2008-03-29 04:34:48 -04:00
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: point x y z ;" eval ] unit-test
|
2008-03-26 17:38:31 -04:00
|
|
|
|
|
|
|
[ 100 ] [ "p" get x>> ] unit-test
|
|
|
|
[ 200 ] [ "p" get y>> ] unit-test
|
|
|
|
[ f ] [ "p" get "z>>" "accessors" lookup execute ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-04-02 03:44:10 -04:00
|
|
|
[ ] [ "p" get 300 ">>z" "accessors" lookup execute drop ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-26 17:38:31 -04:00
|
|
|
[ 4 ] [ "p" get tuple-size ] unit-test
|
|
|
|
|
|
|
|
[ 300 ] [ "p" get "z>>" "accessors" lookup execute ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-04-02 03:44:10 -04:00
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: point z y ;" eval ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-26 17:38:31 -04:00
|
|
|
[ 3 ] [ "p" get tuple-size ] unit-test
|
|
|
|
|
|
|
|
[ "p" get x>> ] must-fail
|
|
|
|
[ 200 ] [ "p" get y>> ] unit-test
|
|
|
|
[ 300 ] [ "p" get "z>>" "accessors" lookup execute ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
TUPLE: predicate-test ;
|
|
|
|
|
|
|
|
C: <predicate-test> predicate-test
|
|
|
|
|
|
|
|
: predicate-test drop f ;
|
|
|
|
|
|
|
|
[ t ] [ <predicate-test> predicate-test? ] unit-test
|
|
|
|
|
2008-03-26 19:23:19 -04:00
|
|
|
PREDICATE: silly-pred < tuple
|
2007-09-20 18:09:08 -04:00
|
|
|
class \ rect = ;
|
|
|
|
|
|
|
|
GENERIC: area
|
2008-03-26 17:38:31 -04:00
|
|
|
M: silly-pred area dup w>> swap h>> * ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
TUPLE: circle radius ;
|
2008-03-26 17:38:31 -04:00
|
|
|
M: circle area radius>> sq pi * ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ 200 ] [ T{ rect f 0 0 10 20 } area ] unit-test
|
|
|
|
|
|
|
|
! Hashcode breakage
|
|
|
|
TUPLE: empty ;
|
|
|
|
|
|
|
|
C: <empty> empty
|
|
|
|
|
|
|
|
[ t ] [ <empty> hashcode fixnum? ] unit-test
|
|
|
|
|
|
|
|
! Compiler regression
|
2008-03-26 17:38:31 -04:00
|
|
|
[ t length ] [ object>> t eq? ] must-fail-with
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ "<constructor-test>" ]
|
2008-04-26 03:01:06 -04:00
|
|
|
[ "IN: classes.tuple.test TUPLE: constructor-test ; C: <constructor-test> constructor-test" eval word word-name ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
TUPLE: size-test a b c d ;
|
|
|
|
|
|
|
|
[ t ] [
|
2008-03-26 17:38:31 -04:00
|
|
|
T{ size-test } tuple-size
|
2007-09-20 18:09:08 -04:00
|
|
|
size-test tuple-size =
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
GENERIC: <yo-momma>
|
|
|
|
|
|
|
|
TUPLE: yo-momma ;
|
|
|
|
|
2008-03-29 04:34:48 -04:00
|
|
|
"IN: classes.tuple.tests C: <yo-momma> yo-momma" eval
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ f ] [ \ <yo-momma> generic? ] unit-test
|
|
|
|
|
|
|
|
! Test forget
|
2007-12-24 17:32:41 -05:00
|
|
|
[
|
|
|
|
[ t ] [ \ yo-momma class? ] unit-test
|
|
|
|
[ ] [ \ yo-momma forget ] unit-test
|
2008-03-24 20:52:21 -04:00
|
|
|
[ f ] [ \ yo-momma update-map get values memq? ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-02-06 16:00:10 -05:00
|
|
|
[ f ] [ \ yo-momma crossref get at ] unit-test
|
2007-12-24 17:32:41 -05:00
|
|
|
] with-compilation-unit
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
TUPLE: loc-recording ;
|
|
|
|
|
|
|
|
[ f ] [ \ loc-recording where not ] unit-test
|
|
|
|
|
|
|
|
! 'forget' wasn't robust enough
|
|
|
|
|
|
|
|
TUPLE: forget-robustness ;
|
|
|
|
|
|
|
|
GENERIC: forget-robustness-generic
|
|
|
|
|
|
|
|
M: forget-robustness forget-robustness-generic ;
|
|
|
|
|
|
|
|
M: integer forget-robustness-generic ;
|
|
|
|
|
2007-12-24 17:32:41 -05:00
|
|
|
[
|
|
|
|
[ ] [ \ forget-robustness-generic forget ] unit-test
|
|
|
|
[ ] [ \ forget-robustness forget ] unit-test
|
|
|
|
[ ] [ { forget-robustness forget-robustness-generic } forget ] unit-test
|
|
|
|
] with-compilation-unit
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! rapido found this one
|
|
|
|
GENERIC# m1 0 ( s n -- n )
|
|
|
|
GENERIC# m2 1 ( s n -- v )
|
|
|
|
|
|
|
|
TUPLE: t1 ;
|
|
|
|
|
|
|
|
M: t1 m1 drop ;
|
|
|
|
M: t1 m2 nip ;
|
|
|
|
|
|
|
|
TUPLE: t2 ;
|
|
|
|
|
|
|
|
M: t2 m1 drop ;
|
|
|
|
M: t2 m2 nip ;
|
|
|
|
|
|
|
|
TUPLE: t3 ;
|
|
|
|
|
|
|
|
M: t3 m1 drop ;
|
|
|
|
M: t3 m2 nip ;
|
|
|
|
|
|
|
|
TUPLE: t4 ;
|
|
|
|
|
|
|
|
M: t4 m1 drop ;
|
|
|
|
M: t4 m2 nip ;
|
|
|
|
|
|
|
|
C: <t4> t4
|
|
|
|
|
|
|
|
[ 1 ] [ 1 <t4> m1 ] unit-test
|
|
|
|
[ 1 ] [ <t4> 1 m2 ] unit-test
|
|
|
|
|
|
|
|
! another combination issue
|
|
|
|
GENERIC: silly
|
|
|
|
|
|
|
|
UNION: my-union slice repetition column array vector reversed ;
|
|
|
|
|
|
|
|
M: my-union silly "x" ;
|
|
|
|
|
|
|
|
M: array silly "y" ;
|
|
|
|
|
|
|
|
M: column silly "fdsfds" ;
|
|
|
|
|
|
|
|
M: repetition silly "zzz" ;
|
|
|
|
|
|
|
|
M: reversed silly "zz" ;
|
|
|
|
|
|
|
|
M: slice silly "tt" ;
|
|
|
|
|
|
|
|
M: string silly "t" ;
|
|
|
|
|
|
|
|
M: vector silly "z" ;
|
|
|
|
|
|
|
|
[ "zz" ] [ 123 <reversed> silly nip ] unit-test
|
|
|
|
|
|
|
|
! Typo
|
|
|
|
SYMBOL: not-a-tuple-class
|
|
|
|
|
|
|
|
[
|
2008-03-29 04:34:48 -04:00
|
|
|
"IN: classes.tuple.tests C: <not-a-tuple-class> not-a-tuple-class"
|
2007-09-20 18:09:08 -04:00
|
|
|
eval
|
2008-02-06 14:47:19 -05:00
|
|
|
] must-fail
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ t ] [
|
2008-03-29 04:34:48 -04:00
|
|
|
"not-a-tuple-class" "classes.tuple.tests" lookup symbol?
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! Missing check
|
2008-04-13 16:06:09 -04:00
|
|
|
[ not-a-tuple-class boa ] must-fail
|
|
|
|
[ not-a-tuple-class new ] must-fail
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-12-26 20:02:41 -05:00
|
|
|
TUPLE: erg's-reshape-problem a b c d ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-12-24 19:40:09 -05:00
|
|
|
C: <erg's-reshape-problem> erg's-reshape-problem
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! We want to make sure constructors are recompiled when
|
|
|
|
! tuples are reshaped
|
2008-04-13 16:06:09 -04:00
|
|
|
: cons-test-1 \ erg's-reshape-problem new ;
|
|
|
|
: cons-test-2 \ erg's-reshape-problem boa ;
|
2007-12-30 17:14:15 -05:00
|
|
|
|
2008-03-29 04:34:48 -04:00
|
|
|
"IN: classes.tuple.tests TUPLE: erg's-reshape-problem a b c d e f ;" eval
|
2008-03-26 18:07:50 -04:00
|
|
|
|
|
|
|
[ ] [ 1 2 3 4 5 6 cons-test-2 "a" set ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ cons-test-1 tuple-size "a" get tuple-size = ] unit-test
|
|
|
|
|
|
|
|
[
|
2008-03-29 04:34:48 -04:00
|
|
|
"IN: classes.tuple.tests SYMBOL: not-a-class C: <not-a-class> not-a-class" eval
|
2008-04-04 04:46:30 -04:00
|
|
|
] [ error>> no-tuple-class? ] must-fail-with
|
2008-03-26 18:07:50 -04:00
|
|
|
|
2008-03-26 19:23:19 -04:00
|
|
|
! Inheritance
|
|
|
|
TUPLE: computer cpu ram ;
|
2008-03-27 02:42:13 -04:00
|
|
|
C: <computer> computer
|
2008-03-26 19:23:19 -04:00
|
|
|
|
2008-03-26 19:37:28 -04:00
|
|
|
[ "TUPLE: computer cpu ram ;" ] [
|
|
|
|
[ \ computer see ] with-string-writer string-lines second
|
2008-03-26 19:23:19 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
TUPLE: laptop < computer battery ;
|
|
|
|
C: <laptop> laptop
|
|
|
|
|
|
|
|
[ t ] [ laptop tuple-class? ] unit-test
|
2008-05-02 03:51:38 -04:00
|
|
|
[ t ] [ laptop tuple class<= ] unit-test
|
|
|
|
[ t ] [ laptop computer class<= ] unit-test
|
2008-03-26 19:23:19 -04:00
|
|
|
[ t ] [ laptop computer classes-intersect? ] unit-test
|
|
|
|
|
|
|
|
[ ] [ "Pentium" 128 3 hours <laptop> "laptop" set ] unit-test
|
|
|
|
[ t ] [ "laptop" get laptop? ] unit-test
|
|
|
|
[ t ] [ "laptop" get computer? ] unit-test
|
|
|
|
[ t ] [ "laptop" get tuple? ] unit-test
|
|
|
|
|
2008-03-31 02:19:34 -04:00
|
|
|
: test-laptop-slot-values
|
|
|
|
[ laptop ] [ "laptop" get class ] unit-test
|
|
|
|
[ "Pentium" ] [ "laptop" get cpu>> ] unit-test
|
|
|
|
[ 128 ] [ "laptop" get ram>> ] unit-test
|
|
|
|
[ t ] [ "laptop" get battery>> 3 hours = ] unit-test ;
|
|
|
|
|
|
|
|
test-laptop-slot-values
|
2008-03-27 02:42:13 -04:00
|
|
|
|
|
|
|
[ laptop ] [
|
|
|
|
"laptop" get tuple-layout
|
|
|
|
dup layout-echelon swap
|
|
|
|
layout-superclasses nth
|
|
|
|
] unit-test
|
|
|
|
|
2008-03-26 19:37:28 -04:00
|
|
|
[ "TUPLE: laptop < computer battery ;" ] [
|
|
|
|
[ \ laptop see ] with-string-writer string-lines second
|
2008-03-26 19:23:19 -04:00
|
|
|
] unit-test
|
|
|
|
|
2008-03-27 02:42:13 -04:00
|
|
|
[ { tuple computer laptop } ] [ laptop superclasses ] unit-test
|
|
|
|
|
|
|
|
TUPLE: server < computer rackmount ;
|
2008-03-26 19:23:19 -04:00
|
|
|
C: <server> server
|
|
|
|
|
|
|
|
[ t ] [ server tuple-class? ] unit-test
|
2008-05-02 03:51:38 -04:00
|
|
|
[ t ] [ server tuple class<= ] unit-test
|
|
|
|
[ t ] [ server computer class<= ] unit-test
|
2008-03-26 19:23:19 -04:00
|
|
|
[ t ] [ server computer classes-intersect? ] unit-test
|
|
|
|
|
2008-03-27 02:42:13 -04:00
|
|
|
[ ] [ "PowerPC" 64 "1U" <server> "server" set ] unit-test
|
2008-03-26 19:23:19 -04:00
|
|
|
[ t ] [ "server" get server? ] unit-test
|
|
|
|
[ t ] [ "server" get computer? ] unit-test
|
|
|
|
[ t ] [ "server" get tuple? ] unit-test
|
|
|
|
|
2008-03-31 02:19:34 -04:00
|
|
|
: test-server-slot-values
|
|
|
|
[ server ] [ "server" get class ] unit-test
|
|
|
|
[ "PowerPC" ] [ "server" get cpu>> ] unit-test
|
|
|
|
[ 64 ] [ "server" get ram>> ] unit-test
|
|
|
|
[ "1U" ] [ "server" get rackmount>> ] unit-test ;
|
|
|
|
|
|
|
|
test-server-slot-values
|
2008-03-27 02:42:13 -04:00
|
|
|
|
2008-03-26 19:23:19 -04:00
|
|
|
[ f ] [ "server" get laptop? ] unit-test
|
|
|
|
[ f ] [ "laptop" get server? ] unit-test
|
|
|
|
|
2008-05-02 03:51:38 -04:00
|
|
|
[ f ] [ server laptop class<= ] unit-test
|
|
|
|
[ f ] [ laptop server class<= ] unit-test
|
2008-03-26 19:23:19 -04:00
|
|
|
[ f ] [ laptop server classes-intersect? ] unit-test
|
|
|
|
|
2008-03-27 02:42:13 -04:00
|
|
|
[ f ] [ 1 2 <computer> laptop? ] unit-test
|
|
|
|
[ f ] [ \ + server? ] unit-test
|
|
|
|
|
|
|
|
[ "TUPLE: server < computer rackmount ;" ] [
|
2008-03-26 19:37:28 -04:00
|
|
|
[ \ server see ] with-string-writer string-lines second
|
2008-03-26 19:23:19 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[
|
2008-03-29 04:34:48 -04:00
|
|
|
"IN: classes.tuple.tests TUPLE: bad-superclass < word ;" eval
|
2008-03-26 19:23:19 -04:00
|
|
|
] must-fail
|
|
|
|
|
2008-03-31 02:19:34 -04:00
|
|
|
! Dynamically changing inheritance hierarchy
|
2008-03-28 21:28:17 -04:00
|
|
|
TUPLE: electronic-device ;
|
|
|
|
|
2008-03-31 02:19:34 -04:00
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: computer < electronic-device cpu ram ;" eval ] unit-test
|
2008-03-28 21:28:17 -04:00
|
|
|
|
2008-05-02 03:51:38 -04:00
|
|
|
[ f ] [ electronic-device laptop class<= ] unit-test
|
|
|
|
[ t ] [ server electronic-device class<= ] unit-test
|
|
|
|
[ t ] [ laptop server class-or electronic-device class<= ] unit-test
|
2008-03-28 21:28:17 -04:00
|
|
|
|
|
|
|
[ t ] [ "laptop" get electronic-device? ] unit-test
|
|
|
|
[ t ] [ "laptop" get computer? ] unit-test
|
|
|
|
[ t ] [ "laptop" get laptop? ] unit-test
|
|
|
|
[ f ] [ "laptop" get server? ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ "server" get electronic-device? ] unit-test
|
|
|
|
[ t ] [ "server" get computer? ] unit-test
|
|
|
|
[ f ] [ "server" get laptop? ] unit-test
|
|
|
|
[ t ] [ "server" get server? ] unit-test
|
|
|
|
|
2008-03-31 02:19:34 -04:00
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: computer cpu ram ;" eval ] unit-test
|
2008-03-28 21:28:17 -04:00
|
|
|
|
|
|
|
[ f ] [ "laptop" get electronic-device? ] unit-test
|
|
|
|
[ t ] [ "laptop" get computer? ] unit-test
|
|
|
|
|
2008-03-31 02:19:34 -04:00
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: computer < electronic-device cpu ram disk ;" eval ] unit-test
|
|
|
|
|
|
|
|
test-laptop-slot-values
|
|
|
|
test-server-slot-values
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: electronic-device voltage ;" eval ] unit-test
|
|
|
|
|
|
|
|
test-laptop-slot-values
|
|
|
|
test-server-slot-values
|
|
|
|
|
|
|
|
TUPLE: make-me-some-accessors voltage grounded? ;
|
|
|
|
|
|
|
|
[ f ] [ "laptop" get voltage>> ] unit-test
|
|
|
|
[ f ] [ "server" get voltage>> ] unit-test
|
|
|
|
|
|
|
|
[ ] [ "laptop" get 220 >>voltage drop ] unit-test
|
|
|
|
[ ] [ "server" get 110 >>voltage drop ] unit-test
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: electronic-device voltage grounded? ;" eval ] unit-test
|
|
|
|
|
|
|
|
test-laptop-slot-values
|
|
|
|
test-server-slot-values
|
|
|
|
|
|
|
|
[ 220 ] [ "laptop" get voltage>> ] unit-test
|
|
|
|
[ 110 ] [ "server" get voltage>> ] unit-test
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: electronic-device grounded? voltage ;" eval ] unit-test
|
|
|
|
|
|
|
|
test-laptop-slot-values
|
|
|
|
test-server-slot-values
|
|
|
|
|
|
|
|
[ 220 ] [ "laptop" get voltage>> ] unit-test
|
|
|
|
[ 110 ] [ "server" get voltage>> ] unit-test
|
|
|
|
|
|
|
|
! Reshaping superclass and subclass simultaneously
|
|
|
|
"IN: classes.tuple.tests TUPLE: electronic-device voltage ; TUPLE: computer < electronic-device cpu ram ;" eval
|
|
|
|
|
|
|
|
test-laptop-slot-values
|
|
|
|
test-server-slot-values
|
|
|
|
|
|
|
|
[ 220 ] [ "laptop" get voltage>> ] unit-test
|
|
|
|
[ 110 ] [ "server" get voltage>> ] unit-test
|
|
|
|
|
|
|
|
! Reshape crash
|
|
|
|
TUPLE: test1 a ; TUPLE: test2 < test1 b ;
|
|
|
|
|
2008-04-02 19:50:21 -04:00
|
|
|
C: <test2> test2
|
|
|
|
|
|
|
|
"a" "b" <test2> "test" set
|
2008-03-31 02:19:34 -04:00
|
|
|
|
|
|
|
: test-a/b
|
|
|
|
[ "a" ] [ "test" get a>> ] unit-test
|
|
|
|
[ "b" ] [ "test" get b>> ] unit-test ;
|
|
|
|
|
|
|
|
test-a/b
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: test1 a x ; TUPLE: test2 < test1 b y ;" eval ] unit-test
|
|
|
|
|
|
|
|
test-a/b
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: test1 a ; TUPLE: test2 < test1 b ;" eval ] unit-test
|
|
|
|
|
|
|
|
test-a/b
|
|
|
|
|
2008-03-31 02:26:09 -04:00
|
|
|
! Twice in the same compilation unit
|
|
|
|
[
|
|
|
|
test1 tuple { "a" "x" "y" } define-tuple-class
|
|
|
|
test1 tuple { "a" "y" } define-tuple-class
|
|
|
|
] with-compilation-unit
|
|
|
|
|
|
|
|
test-a/b
|
|
|
|
|
2008-03-31 04:40:27 -04:00
|
|
|
! Moving slots up and down
|
|
|
|
TUPLE: move-up-1 a b ;
|
|
|
|
TUPLE: move-up-2 < move-up-1 c ;
|
|
|
|
|
|
|
|
T{ move-up-2 f "a" "b" "c" } "move-up" set
|
|
|
|
|
|
|
|
: test-move-up
|
|
|
|
[ "a" ] [ "move-up" get a>> ] unit-test
|
|
|
|
[ "b" ] [ "move-up" get b>> ] unit-test
|
|
|
|
[ "c" ] [ "move-up" get c>> ] unit-test ;
|
|
|
|
|
|
|
|
test-move-up
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: move-up-1 a b c ; TUPLE: move-up-2 < move-up-1 ;" eval ] unit-test
|
|
|
|
|
|
|
|
test-move-up
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: move-up-1 a c ; TUPLE: move-up-2 < move-up-1 b ;" eval ] unit-test
|
|
|
|
|
|
|
|
test-move-up
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: move-up-1 c ; TUPLE: move-up-2 < move-up-1 b a ;" eval ] unit-test
|
|
|
|
|
|
|
|
test-move-up
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: move-up-1 ; TUPLE: move-up-2 < move-up-1 a b c ;" eval ] unit-test
|
|
|
|
|
|
|
|
! Constructors must be recompiled when changing superclass
|
|
|
|
TUPLE: constructor-update-1 xxx ;
|
|
|
|
|
|
|
|
TUPLE: constructor-update-2 < constructor-update-1 yyy zzz ;
|
|
|
|
|
|
|
|
C: <constructor-update-2> constructor-update-2
|
|
|
|
|
|
|
|
{ 3 1 } [ <constructor-update-2> ] must-infer-as
|
|
|
|
|
|
|
|
[ ] [ "IN: classes.tuple.tests TUPLE: constructor-update-1 xxx ttt www ;" eval ] unit-test
|
|
|
|
|
|
|
|
{ 5 1 } [ <constructor-update-2> ] must-infer-as
|
|
|
|
|
|
|
|
[ { f 1 2 3 4 5 } ] [ 1 2 3 4 5 <constructor-update-2> tuple-slots ] unit-test
|
|
|
|
|
2008-03-29 06:03:04 -04:00
|
|
|
! Redefinition problem
|
|
|
|
TUPLE: redefinition-problem ;
|
|
|
|
|
|
|
|
UNION: redefinition-problem' redefinition-problem integer ;
|
|
|
|
|
|
|
|
[ t ] [ 3 redefinition-problem'? ] unit-test
|
|
|
|
|
|
|
|
TUPLE: redefinition-problem-2 ;
|
|
|
|
|
|
|
|
"IN: classes.tuple.tests TUPLE: redefinition-problem < redefinition-problem-2 ;" eval
|
|
|
|
|
|
|
|
[ t ] [ 3 redefinition-problem'? ] unit-test
|
|
|
|
|
2008-03-26 18:07:50 -04:00
|
|
|
! Hardcore unit tests
|
|
|
|
USE: threads
|
|
|
|
|
2008-03-29 03:46:29 -04:00
|
|
|
\ thread slot-names "slot-names" set
|
2008-03-26 18:07:50 -04:00
|
|
|
|
|
|
|
[ ] [
|
|
|
|
[
|
2008-03-26 19:23:19 -04:00
|
|
|
\ thread tuple { "xxx" } "slot-names" get append
|
2008-03-26 18:07:50 -04:00
|
|
|
define-tuple-class
|
|
|
|
] with-compilation-unit
|
|
|
|
|
|
|
|
[ 1337 sleep ] "Test" spawn drop
|
|
|
|
|
|
|
|
[
|
2008-03-26 19:23:19 -04:00
|
|
|
\ thread tuple "slot-names" get
|
2008-03-26 18:07:50 -04:00
|
|
|
define-tuple-class
|
|
|
|
] with-compilation-unit
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
USE: vocabs
|
|
|
|
|
2008-03-29 03:46:29 -04:00
|
|
|
\ vocab slot-names "slot-names" set
|
2008-03-26 18:07:50 -04:00
|
|
|
|
|
|
|
[ ] [
|
|
|
|
[
|
2008-03-26 19:23:19 -04:00
|
|
|
\ vocab tuple { "xxx" } "slot-names" get append
|
2008-03-26 18:07:50 -04:00
|
|
|
define-tuple-class
|
|
|
|
] with-compilation-unit
|
|
|
|
|
|
|
|
all-words drop
|
|
|
|
|
|
|
|
[
|
2008-03-26 19:23:19 -04:00
|
|
|
\ vocab tuple "slot-names" get
|
2008-03-26 18:07:50 -04:00
|
|
|
define-tuple-class
|
|
|
|
] with-compilation-unit
|
|
|
|
] unit-test
|
2008-04-02 22:27:49 -04:00
|
|
|
|
2008-04-04 04:46:30 -04:00
|
|
|
[ "USE: words T{ word }" eval ] [ error>> no-method? ] must-fail-with
|
2008-04-02 22:27:49 -04:00
|
|
|
|
|
|
|
! Accessors not being forgotten...
|
|
|
|
[ [ ] ] [
|
|
|
|
"IN: classes.tuple.tests TUPLE: forget-accessors-test x y z ;"
|
|
|
|
<string-reader>
|
|
|
|
"forget-accessors-test" parse-stream
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [ "forget-accessors-test" "classes.tuple.tests" lookup class? ] unit-test
|
|
|
|
|
|
|
|
: accessor-exists? ( class name -- ? )
|
|
|
|
>r "forget-accessors-test" "classes.tuple.tests" lookup r>
|
|
|
|
">>" append "accessors" lookup method >boolean ;
|
|
|
|
|
|
|
|
[ t ] [ "x" accessor-exists? ] unit-test
|
|
|
|
[ t ] [ "y" accessor-exists? ] unit-test
|
|
|
|
[ t ] [ "z" accessor-exists? ] unit-test
|
|
|
|
|
|
|
|
[ [ ] ] [
|
|
|
|
"IN: classes.tuple.tests GENERIC: forget-accessors-test"
|
|
|
|
<string-reader>
|
|
|
|
"forget-accessors-test" parse-stream
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ f ] [ "forget-accessors-test" "classes.tuple.tests" lookup class? ] unit-test
|
|
|
|
|
|
|
|
[ f ] [ "x" accessor-exists? ] unit-test
|
|
|
|
[ f ] [ "y" accessor-exists? ] unit-test
|
|
|
|
[ f ] [ "z" accessor-exists? ] unit-test
|
2008-04-03 05:58:37 -04:00
|
|
|
|
|
|
|
TUPLE: another-forget-accessors-test ;
|
|
|
|
|
|
|
|
|
|
|
|
[ [ ] ] [
|
|
|
|
"IN: classes.tuple.tests GENERIC: another-forget-accessors-test"
|
|
|
|
<string-reader>
|
|
|
|
"another-forget-accessors-test" parse-stream
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [ \ another-forget-accessors-test class? ] unit-test
|
2008-04-07 21:44:43 -04:00
|
|
|
|
|
|
|
! Shadowing test
|
|
|
|
[ f ] [
|
|
|
|
t parser-notes? [
|
|
|
|
[
|
|
|
|
"IN: classes.tuple.tests TUPLE: shadow-1 a b ; TUPLE: shadow-2 < shadow-1 a b ;" eval
|
|
|
|
] with-string-writer empty?
|
|
|
|
] with-variable
|
|
|
|
] unit-test
|
2008-04-14 04:54:02 -04:00
|
|
|
|
|
|
|
! Missing error check
|
|
|
|
[ "IN: tuples.test USE: words TUPLE: wrong-superclass < word ;" eval ] must-fail
|