138 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Factor
		
	
	
| IN: compiler.tree.modular-arithmetic.tests
 | |
| USING: kernel kernel.private tools.test math math.partial-dispatch
 | |
| math.private accessors slots.private sequences strings sbufs
 | |
| compiler.tree.builder
 | |
| compiler.tree.optimizer
 | |
| compiler.tree.debugger ;
 | |
| 
 | |
| : test-modular-arithmetic ( quot -- quot' )
 | |
|     build-tree optimize-tree nodes>quot ;
 | |
| 
 | |
| [ [ >R >fixnum R> >fixnum fixnum+fast ] ]
 | |
| [ [ { integer integer } declare + >fixnum ] test-modular-arithmetic ] unit-test
 | |
| 
 | |
| [ [ +-integer-integer dup >fixnum ] ]
 | |
| [ [ { integer integer } declare + dup >fixnum ] test-modular-arithmetic ] unit-test
 | |
| 
 | |
| [ [ >R >fixnum R> >fixnum fixnum+fast 4 fixnum*fast ] ]
 | |
| [ [ { integer integer } declare + 4 * >fixnum ] test-modular-arithmetic ] unit-test
 | |
| 
 | |
| TUPLE: declared-fixnum { x fixnum } ;
 | |
| 
 | |
| [ t ] [
 | |
|     [ { declared-fixnum } declare [ 1 + ] change-x ]
 | |
|     { + fixnum+ >fixnum } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [ { declared-fixnum } declare x>> drop ]
 | |
|     { slot } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ f ] [
 | |
|     [ { integer } declare -63 shift 4095 bitand ]
 | |
|     \ shift inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [ { integer } declare 127 bitand 3 + ]
 | |
|     { + +-integer-fixnum bitand } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ f ] [
 | |
|     [ { integer } declare 127 bitand 3 + ]
 | |
|     { >fixnum } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [
 | |
|         { integer } declare
 | |
|         dup 0 >= [
 | |
|             615949 * 797807 + 20 2^ mod dup 19 2^ -
 | |
|         ] [ dup ] if
 | |
|     ] { * + shift mod fixnum-mod fixnum* fixnum+ fixnum- } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [
 | |
|         { fixnum } declare
 | |
|         615949 * 797807 + 20 2^ mod dup 19 2^ -
 | |
|     ] { >fixnum } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [
 | |
|         { integer } declare 0 swap
 | |
|         [
 | |
|             drop 615949 * 797807 + 20 2^ rem dup 19 2^ -
 | |
|         ] map
 | |
|     ] { * + shift rem mod fixnum-mod fixnum* fixnum+ fixnum- } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [
 | |
|         { fixnum } declare 0 swap
 | |
|         [
 | |
|             drop 615949 * 797807 + 20 2^ rem dup 19 2^ -
 | |
|         ] map
 | |
|     ] { * + shift rem mod fixnum-mod fixnum* fixnum+ fixnum- >fixnum } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [ { string sbuf } declare ] \ push-all def>> append \ + inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [ { string sbuf } declare ] \ push-all def>> append \ fixnum+ inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [ { string sbuf } declare ] \ push-all def>> append \ >fixnum inlined?
 | |
| ] unit-test
 | |
| 
 | |
| 
 | |
| 
 | |
| [ t ] [
 | |
|     [
 | |
|         { integer } declare [ 256 mod ] map
 | |
|     ] { mod fixnum-mod } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ f ] [
 | |
|     [
 | |
|         256 mod
 | |
|     ] { mod fixnum-mod } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ f ] [
 | |
|     [
 | |
|         >fixnum 256 mod
 | |
|     ] { mod fixnum-mod } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ f ] [
 | |
|     [
 | |
|         dup 0 >= [ 256 mod ] when
 | |
|     ] { mod fixnum-mod } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [
 | |
|         { integer } declare dup 0 >= [ 256 mod ] when
 | |
|     ] { mod fixnum-mod } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [
 | |
|         { integer } declare 256 rem
 | |
|     ] { mod fixnum-mod } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ t ] [
 | |
|     [
 | |
|         { integer } declare [ 256 rem ] map
 | |
|     ] { mod fixnum-mod rem } inlined?
 | |
| ] unit-test
 | |
| 
 | |
| [ [ >fixnum 255 fixnum-bitand ] ]
 | |
| [ [ >integer 256 rem ] test-modular-arithmetic ] unit-test |