@@ -605,6 +605,49 @@ def test_aref
605605 assert_equal ( 1 , ( -2 **( BIGNUM_MIN_BITS *4 ) ) [ BIGNUM_MIN_BITS *4 ] )
606606 end
607607
608+ def test_aref2
609+ x = ( 0x123456789abcdef << ( BIGNUM_MIN_BITS + 32 ) ) | 0x12345678
610+ assert_equal ( x , x [ 0 , x . bit_length ] )
611+ assert_equal ( x >> 10 , x [ 10 , x . bit_length ] )
612+ assert_equal ( 0x45678 , x [ 0 , 20 ] )
613+ assert_equal ( 0x6780 , x [ -4 , 16 ] )
614+ assert_equal ( 0x123456 , x [ x . bit_length - 21 , 40 ] )
615+ assert_equal ( 0x6789ab , x [ x . bit_length - 41 , 24 ] )
616+ assert_equal ( 0 , x [ -20 , 10 ] )
617+ assert_equal ( 0 , x [ x . bit_length + 10 , 10 ] )
618+
619+ assert_equal ( 0 , x [ 5 , 0 ] )
620+ assert_equal ( 0 , ( -x ) [ 5 , 0 ] )
621+
622+ assert_equal ( x >> 5 , x [ 5 , -1 ] )
623+ assert_equal ( x << 5 , x [ -5 , -1 ] )
624+ assert_equal ( ( -x ) >> 5 , ( -x ) [ 5 , -1 ] )
625+ assert_equal ( ( -x ) << 5 , ( -x ) [ -5 , -1 ] )
626+
627+ assert_equal ( x << 5 , x [ -5 , FIXNUM_MAX ] )
628+ assert_equal ( x >> 5 , x [ 5 , FIXNUM_MAX ] )
629+ assert_equal ( 0 , x [ FIXNUM_MIN , 100 ] )
630+ assert_equal ( 0 , ( -x ) [ FIXNUM_MIN , 100 ] )
631+
632+ y = ( x << 160 ) | 0x1234_0000_0000_0000_1234_0000_0000_0000
633+ assert_equal ( 0xffffedcc00 , ( -y ) [ 40 , 40 ] )
634+ assert_equal ( 0xfffffffedc , ( -y ) [ 52 , 40 ] )
635+ assert_equal ( 0xffffedcbff , ( -y ) [ 104 , 40 ] )
636+ assert_equal ( 0xfffff6e5d4 , ( -y ) [ y . bit_length - 20 , 40 ] )
637+ assert_equal ( 0 , ( -y ) [ -20 , 10 ] )
638+ assert_equal ( 0xfff , ( -y ) [ y . bit_length + 10 , 12 ] )
639+
640+ z = ( 1 << ( BIGNUM_MIN_BITS * 2 ) ) - 1
641+ assert_equal ( 0x400 , ( -z ) [ -10 , 20 ] )
642+ assert_equal ( 1 , ( -z ) [ 0 , 20 ] )
643+ assert_equal ( 0 , ( -z ) [ 10 , 20 ] )
644+ assert_equal ( 1 , ( -z ) [ 0 , z . bit_length ] )
645+ assert_equal ( 0 , ( -z ) [ z . bit_length - 10 , 10 ] )
646+ assert_equal ( 0x400 , ( -z ) [ z . bit_length - 10 , 11 ] )
647+ assert_equal ( 0xfff , ( -z ) [ z . bit_length , 12 ] )
648+ assert_equal ( 0xfff00 , ( -z ) [ z . bit_length - 8 , 20 ] )
649+ end
650+
608651 def test_hash
609652 assert_nothing_raised { T31P . hash }
610653 end
0 commit comments