106 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Factor
		
	
	
| USING: boxes kernel namespaces refs tools.test ;
 | |
| IN: refs.tests
 | |
| 
 | |
| ! assoc-refs
 | |
| { 3 } [
 | |
|     H{ { "a" 3 } } "a" <value-ref> get-ref
 | |
| ] unit-test
 | |
| 
 | |
| { 4 } [
 | |
|     4 H{ { "a" 3 } } clone "a" <value-ref>
 | |
|     [ set-ref ] keep
 | |
|     get-ref
 | |
| ] unit-test
 | |
| 
 | |
| { "a" } [
 | |
|     H{ { "a" 3 } } "a" <key-ref> get-ref
 | |
| ] unit-test
 | |
| 
 | |
| { H{ { "b" 3 } } } [
 | |
|     "b" H{ { "a" 3 } } clone [
 | |
|         "a" <key-ref>
 | |
|         set-ref
 | |
|     ] keep
 | |
| ] unit-test
 | |
| 
 | |
| SYMBOLS: lion giraffe elephant rabbit ;
 | |
| 
 | |
| ! obj-refs
 | |
| { rabbit } [ rabbit <obj-ref> get-ref ] unit-test
 | |
| { rabbit } [ f <obj-ref> rabbit set-ref* get-ref ] unit-test
 | |
| { rabbit } [ rabbit <obj-ref> take ] unit-test
 | |
| { rabbit f } [ rabbit <obj-ref> [ take ] keep get-ref ] unit-test
 | |
| { lion } [ rabbit <obj-ref> dup [ drop lion ] change-ref get-ref ] unit-test
 | |
| 
 | |
| ! var-refs
 | |
| { giraffe } [ [ giraffe rabbit set rabbit <var-ref> get-ref ] with-scope ] unit-test
 | |
| 
 | |
| { rabbit }
 | |
| [
 | |
|     [
 | |
|         lion rabbit set [
 | |
|             rabbit rabbit set rabbit <var-ref> get-ref
 | |
|         ] with-scope
 | |
|     ] with-scope
 | |
| ] unit-test
 | |
| 
 | |
| { rabbit } [
 | |
|     rabbit <var-ref>
 | |
|     [
 | |
|         lion rabbit set [
 | |
|             rabbit rabbit set get-ref
 | |
|         ] with-scope
 | |
|     ] with-scope
 | |
| ] unit-test
 | |
| 
 | |
| { elephant } [
 | |
|     rabbit <var-ref>
 | |
|     [
 | |
|         elephant rabbit set [
 | |
|             rabbit rabbit set
 | |
|         ] with-scope
 | |
|         get-ref
 | |
|     ] with-scope
 | |
| ] unit-test
 | |
| 
 | |
| { rabbit } [
 | |
|     rabbit <var-ref>
 | |
|     [
 | |
|         elephant set-ref* [
 | |
|             rabbit set-ref* get-ref
 | |
|         ] with-scope
 | |
|     ] with-scope
 | |
| ] unit-test
 | |
| 
 | |
| { elephant } [
 | |
|     rabbit <var-ref>
 | |
|     [
 | |
|         elephant set-ref* [
 | |
|             rabbit set-ref*
 | |
|         ] with-scope
 | |
|         get-ref
 | |
|     ] with-scope
 | |
| ] unit-test
 | |
| 
 | |
| ! Top Hats
 | |
| { lion } [ lion rabbit set-global rabbit <global-var-ref> get-ref ] unit-test
 | |
| { giraffe } [ rabbit <global-var-ref> giraffe set-ref* get-ref ] unit-test
 | |
| 
 | |
| ! Tuple refs
 | |
| TUPLE: foo bar ;
 | |
| C: <foo> foo
 | |
| 
 | |
| : test-tuple ( -- tuple )
 | |
|     rabbit <foo> ;
 | |
| 
 | |
| : test-slot-ref ( -- slot-ref )
 | |
|     test-tuple 2 <slot-ref> ; ! hack!
 | |
| 
 | |
| { rabbit } [ test-slot-ref get-ref ] unit-test
 | |
| { lion } [ test-slot-ref lion set-ref* get-ref ] unit-test
 | |
| 
 | |
| ! Boxes as refs
 | |
| { rabbit } [ <box> rabbit set-ref* get-ref ] unit-test
 | |
| [ <box> rabbit set-ref* lion set-ref* ] must-fail
 | |
| [ <box> get-ref ] must-fail
 |