| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! Copyright (C) 2006 Chris Double. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | ! 
 | 
					
						
							| 
									
										
										
										
											2008-03-08 03:51:26 -05:00
										 |  |  | USING: tools.test kernel serialize io io.streams.byte-array math | 
					
						
							| 
									
										
										
										
											2008-11-14 21:18:16 -05:00
										 |  |  | alien arrays byte-arrays bit-arrays specialized-arrays.double | 
					
						
							|  |  |  | sequences math prettyprint parser classes math.constants | 
					
						
							| 
									
										
										
										
											2008-12-03 04:43:59 -05:00
										 |  |  | io.encodings.binary random assocs serialize.private ;
 | 
					
						
							| 
									
										
										
										
											2008-03-01 17:00:45 -05:00
										 |  |  | IN: serialize.tests | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-23 01:34:02 -04:00
										 |  |  | : test-serialize-cell ( a -- ? )
 | 
					
						
							| 
									
										
										
										
											2008-03-08 03:51:26 -05:00
										 |  |  |     2^ random dup
 | 
					
						
							|  |  |  |     binary [ serialize-cell ] with-byte-writer | 
					
						
							|  |  |  |     binary [ deserialize-cell ] with-byte-reader = ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     100 [ | 
					
						
							|  |  |  |         drop
 | 
					
						
							| 
									
										
										
										
											2008-06-11 03:58:38 -04:00
										 |  |  |         40 [        test-serialize-cell ] all?
 | 
					
						
							|  |  |  |          4 [ 40 *   test-serialize-cell ] all?
 | 
					
						
							|  |  |  |          4 [ 400 *  test-serialize-cell ] all?
 | 
					
						
							|  |  |  |          4 [ 4000 * test-serialize-cell ] all?
 | 
					
						
							|  |  |  |         and and and
 | 
					
						
							| 
									
										
										
										
											2008-03-08 03:51:26 -05:00
										 |  |  |     ] all?
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | TUPLE: serialize-test a b ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | C: <serialize-test> serialize-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-23 01:34:02 -04:00
										 |  |  | CONSTANT: objects | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         f
 | 
					
						
							|  |  |  |         t
 | 
					
						
							|  |  |  |         0
 | 
					
						
							|  |  |  |         -50
 | 
					
						
							|  |  |  |         20
 | 
					
						
							|  |  |  |         5.25
 | 
					
						
							|  |  |  |         -5.25
 | 
					
						
							|  |  |  |         C{ 1 2 } | 
					
						
							|  |  |  |         1/2 | 
					
						
							|  |  |  |         "test" | 
					
						
							|  |  |  |         { 1 2 "three" } | 
					
						
							|  |  |  |         V{ 1 2 "three" } | 
					
						
							|  |  |  |         SBUF" hello world" | 
					
						
							| 
									
										
										
										
											2008-03-08 03:51:26 -05:00
										 |  |  |         "hello \u123456 unicode" | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |         \ dup | 
					
						
							|  |  |  |         [ \ dup dup ] | 
					
						
							|  |  |  |         T{ serialize-test f "a" 2 } | 
					
						
							|  |  |  |         B{ 50 13 55 64 1 } | 
					
						
							|  |  |  |         ?{ t f t f f t f } | 
					
						
							| 
									
										
										
										
											2008-11-14 21:18:16 -05:00
										 |  |  |         double-array{ 1.0 3.0 4.0 1.0 2.35 0.33 } | 
					
						
							| 
									
										
										
										
											2008-02-06 20:23:39 -05:00
										 |  |  |         << 1 [ 2 ] curry parsed >> | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |         { { "a" "bc" } { "de" "fg" } } | 
					
						
							|  |  |  |         H{ { "a" "bc" } { "de" "fg" } } | 
					
						
							| 
									
										
										
										
											2009-03-23 01:34:02 -04:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : check-serialize-1 ( obj -- ? )
 | 
					
						
							| 
									
										
										
										
											2008-03-17 00:41:26 -04:00
										 |  |  |     "=====" print
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     dup class .
 | 
					
						
							| 
									
										
										
										
											2008-03-17 00:41:26 -04:00
										 |  |  |     dup .
 | 
					
						
							| 
									
										
										
										
											2008-03-08 03:51:26 -05:00
										 |  |  |     dup
 | 
					
						
							| 
									
										
										
										
											2008-03-17 00:41:26 -04:00
										 |  |  |     object>bytes | 
					
						
							|  |  |  |     bytes>object | 
					
						
							|  |  |  |     dup . = ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : check-serialize-2 ( obj -- ? )
 | 
					
						
							|  |  |  |     dup number? over wrapper? or [ | 
					
						
							|  |  |  |         drop t ! we don't care if numbers aren't interned | 
					
						
							|  |  |  |     ] [ | 
					
						
							| 
									
										
										
										
											2008-03-17 00:41:26 -04:00
										 |  |  |         "=====" print
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |         dup class .
 | 
					
						
							| 
									
										
										
										
											2008-03-17 00:41:26 -04:00
										 |  |  |         dup 2array dup .
 | 
					
						
							|  |  |  |         object>bytes | 
					
						
							|  |  |  |         bytes>object dup .
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |         first2 eq?
 | 
					
						
							|  |  |  |     ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ objects [ check-serialize-1 ] all? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ objects [ check-serialize-2 ] all? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ pi check-serialize-1 ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-08 03:51:26 -05:00
										 |  |  | [ serialize ] must-infer | 
					
						
							|  |  |  | [ deserialize ] must-infer | 
					
						
							| 
									
										
										
										
											2008-03-17 00:41:26 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     V{ } dup dup push
 | 
					
						
							|  |  |  |     object>bytes | 
					
						
							|  |  |  |     bytes>object | 
					
						
							|  |  |  |     dup first eq?
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     H{ } dup dup dup set-at
 | 
					
						
							|  |  |  |     object>bytes | 
					
						
							|  |  |  |     bytes>object | 
					
						
							|  |  |  |     dup keys first eq?
 | 
					
						
							|  |  |  | ] unit-test |