|
2 | 2 |
|
3 | 3 | class TestBN < TestCase
|
4 | 4 |
|
| 5 | + def setup |
| 6 | + super |
| 7 | + @e1 = OpenSSL::BN.new(999.to_s(16), 16) # OpenSSL::BN.new(str, 16) must be most stable |
| 8 | + @e2 = OpenSSL::BN.new("-" + 999.to_s(16), 16) |
| 9 | + @e3 = OpenSSL::BN.new((2**107-1).to_s(16), 16) |
| 10 | + @e4 = OpenSSL::BN.new("-" + (2**107-1).to_s(16), 16) |
| 11 | + end |
| 12 | + |
| 13 | + def test_to_int |
| 14 | + assert_equal(999, @e1.to_i) |
| 15 | + assert_equal(-999, @e2.to_i) |
| 16 | + assert_equal(2**107-1, @e3.to_i) |
| 17 | + assert_equal(-(2**107-1), @e4.to_i) |
| 18 | + |
| 19 | + assert_equal(999, @e1.to_int) |
| 20 | + end |
| 21 | + |
| 22 | + def test_coerce |
| 23 | + assert_equal(["", "-999"], @e2.coerce("")) |
| 24 | + assert_equal([1000, -999], @e2.coerce(1000)) |
| 25 | + assert_raise(TypeError) { @e2.coerce(Class.new.new) } |
| 26 | + end |
| 27 | + |
| 28 | + def test_zero_p |
| 29 | + assert_equal(true, 0.to_bn.zero?) |
| 30 | + assert_equal(false, 1.to_bn.zero?) |
| 31 | + end |
| 32 | + |
| 33 | + def test_one_p |
| 34 | + assert_equal(true, 1.to_bn.one?) |
| 35 | + assert_equal(false, 2.to_bn.one?) |
| 36 | + end |
| 37 | + |
| 38 | + def test_odd_p |
| 39 | + assert_equal(true, 1.to_bn.odd?) |
| 40 | + assert_equal(false, 2.to_bn.odd?) |
| 41 | + end |
| 42 | + |
| 43 | + def test_negative_p |
| 44 | + assert_equal(false, 0.to_bn.negative?) |
| 45 | + assert_equal(false, @e1.negative?) |
| 46 | + assert_equal(true, @e2.negative?) |
| 47 | + end |
| 48 | + |
| 49 | + def test_abs |
| 50 | + assert_equal(@e1, @e2.abs) |
| 51 | + assert_equal(@e3, @e4.abs) |
| 52 | + assert_not_equal(@e2, @e2.abs) |
| 53 | + assert_not_equal(@e4, @e4.abs) |
| 54 | + assert_equal(false, @e2.abs.negative?) |
| 55 | + assert_equal(false, @e4.abs.negative?) |
| 56 | + assert_equal(true, (-@e1.abs).negative?) |
| 57 | + assert_equal(true, (-@e2.abs).negative?) |
| 58 | + assert_equal(true, (-@e3.abs).negative?) |
| 59 | + assert_equal(true, (-@e4.abs).negative?) |
| 60 | + end |
| 61 | + |
| 62 | + def test_unary_plus_minus |
| 63 | + assert_equal(999, +@e1) |
| 64 | + assert_equal(-999, +@e2) |
| 65 | + assert_equal(-999, -@e1) |
| 66 | + assert_equal(+999, -@e2) |
| 67 | + |
| 68 | + # These methods create new BN instances due to BN mutability |
| 69 | + # Ensure that the instance isn't the same |
| 70 | + e1_plus = +@e1 |
| 71 | + e1_minus = -@e1 |
| 72 | + assert_equal(false, @e1.equal?(e1_plus)) |
| 73 | + assert_equal(true, @e1 == e1_plus) |
| 74 | + assert_equal(false, @e1.equal?(e1_minus)) |
| 75 | + end |
| 76 | + |
| 77 | + def test_mod |
| 78 | + assert_equal(1, 1.to_bn % 2) |
| 79 | + assert_equal(0, 2.to_bn % 1) |
| 80 | + #assert_equal(-2, -2.to_bn % 7) |
| 81 | + end |
| 82 | + |
| 83 | + |
5 | 84 | def test_new
|
6 | 85 | bn = OpenSSL::BN.new('0') unless defined? JRUBY_VERSION
|
7 | 86 | assert_equal ( bn || OpenSSL::BN.new(0) ).to_s, '0'
|
|
0 commit comments