130 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Factor
		
	
	
USING: unrolled-lists tools.test deques kernel sequences
 | 
						|
random prettyprint grouping math ;
 | 
						|
 | 
						|
{ 1 } [ <unrolled-list> 1 over push-front pop-front ] unit-test
 | 
						|
{ 1 } [ <unrolled-list> 1 over push-front pop-back ] unit-test
 | 
						|
{ 1 } [ <unrolled-list> 1 over push-back pop-front ] unit-test
 | 
						|
{ 1 } [ <unrolled-list> 1 over push-back pop-back ] unit-test
 | 
						|
 | 
						|
{ 1 2 } [
 | 
						|
    <unrolled-list> 1 over push-back 2 over push-back
 | 
						|
    [ pop-front ] [ pop-front ] bi
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ 2 1 } [
 | 
						|
    <unrolled-list> 1 over push-back 2 over push-back
 | 
						|
    [ pop-back ] [ pop-back ] bi
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ 1 2 3 } [
 | 
						|
    <unrolled-list>
 | 
						|
    1 over push-back
 | 
						|
    2 over push-back
 | 
						|
    3 over push-back
 | 
						|
    [ pop-front ] [ pop-front ] [ pop-front ] tri
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ 3 2 1 } [
 | 
						|
    <unrolled-list>
 | 
						|
    1 over push-back
 | 
						|
    2 over push-back
 | 
						|
    3 over push-back
 | 
						|
    [ pop-back ] [ pop-back ] [ pop-back ] tri
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ { 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 } } [
 | 
						|
    <unrolled-list>
 | 
						|
    32 [ over push-front ] each-integer
 | 
						|
    32 [ dup pop-back ] replicate
 | 
						|
    nip
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ { 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 } } [
 | 
						|
    <unrolled-list>
 | 
						|
    32 [ over push-front ] each-integer
 | 
						|
    32 [ dup pop-front ] replicate reverse
 | 
						|
    nip
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ t } [
 | 
						|
    <unrolled-list>
 | 
						|
    1000 [ 1000 random ] replicate
 | 
						|
    [ [ over push-front ] each ]
 | 
						|
    [ length [ dup pop-back ] replicate ]
 | 
						|
    [ ]
 | 
						|
    tri
 | 
						|
    =
 | 
						|
    nip
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ t } [
 | 
						|
    <unrolled-list>
 | 
						|
    1000 [ 1000 random ] replicate
 | 
						|
    [
 | 
						|
        10 group [
 | 
						|
            [ [ over push-front ] each ]
 | 
						|
            [ length [ dup pop-back ] replicate ]
 | 
						|
            bi
 | 
						|
        ] map concat
 | 
						|
    ] keep
 | 
						|
    =
 | 
						|
    nip
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ t } [ <unrolled-list> deque-empty? ] unit-test
 | 
						|
 | 
						|
{ t } [
 | 
						|
    <unrolled-list>
 | 
						|
    1 over push-front
 | 
						|
    dup pop-front*
 | 
						|
    deque-empty?
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ t } [
 | 
						|
    <unrolled-list>
 | 
						|
    1 over push-back
 | 
						|
    dup pop-front*
 | 
						|
    deque-empty?
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ t } [
 | 
						|
    <unrolled-list>
 | 
						|
    1 over push-front
 | 
						|
    dup pop-back*
 | 
						|
    deque-empty?
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ t } [
 | 
						|
    <unrolled-list>
 | 
						|
    1 over push-back
 | 
						|
    dup pop-back*
 | 
						|
    deque-empty?
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ t } [
 | 
						|
    <unrolled-list>
 | 
						|
    21 over push-front
 | 
						|
    22 over push-front
 | 
						|
    25 over push-front
 | 
						|
    26 over push-front
 | 
						|
    dup pop-back 21 assert=
 | 
						|
    28 over push-front
 | 
						|
    dup pop-back 22 assert=
 | 
						|
    29 over push-front
 | 
						|
    dup pop-back 25 assert=
 | 
						|
    24 over push-front
 | 
						|
    dup pop-back 26 assert=
 | 
						|
    23 over push-front
 | 
						|
    dup pop-back 28 assert=
 | 
						|
    dup pop-back 29 assert=
 | 
						|
    dup pop-back 24 assert=
 | 
						|
    17 over push-front
 | 
						|
    dup pop-back 23 assert=
 | 
						|
    27 over push-front
 | 
						|
    dup pop-back 17 assert=
 | 
						|
    30 over push-front
 | 
						|
    dup pop-back 27 assert=
 | 
						|
    dup pop-back 30 assert=
 | 
						|
    deque-empty?
 | 
						|
] unit-test
 |