summaryrefslogtreecommitdiff
path: root/test/ruby/test_string.rb
blob: 4f2070ade0c47c722d3828e384cffd47c33574dd (plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
require 'test/unit'

class TestString < Test::Unit::TestCase
  def check_sum(str, bits=16)
    sum = 0
    str.each_byte {|c| sum += c}
    sum = sum & ((1 << bits) - 1) if bits != 0
    assert_equal(sum, str.sum(bits))
  end

  def test_sum
    assert_equal(0, "".sum)
    assert_equal(294, "abc".sum)
    check_sum("abc")
    check_sum("\x80")
    0.upto(70) {|bits|
      check_sum("xyz", bits)
    }
  end

  def test_succ
    assert_equal("abd", "abc".succ)
    assert_equal("z",   "y".succ)
    assert_equal("aaa", "zz".succ)

    assert_equal("124",  "123".succ)
    assert_equal("1000", "999".succ)
    assert_equal("2.000", "1.999".succ)

    assert_equal("2000aaa",  "1999zzz".succ)
    assert_equal("AAAAA000", "ZZZZ999".succ)
    assert_equal("*+", "**".succ)

    assert_equal("abce", "abcd".succ)
    assert_equal("THX1139", "THX1138".succ)
    assert_equal("<<koalb>>", "<<koala>>".succ)
    assert_equal("2000aaa", "1999zzz".succ)
    assert_equal("AAAA0000", "ZZZ9999".succ)
    assert_equal("**+", "***".succ)
  end

  def test_succ!
    a = "abc"
    b = a.dup
    assert_equal("abd", a.succ!)
    assert_equal("abd", a)
    assert_equal("abc", b)

    a = "y"
    assert_equal("z", a.succ!)
    assert_equal("z", a)

    a = "zz"
    assert_equal("aaa", a.succ!)
    assert_equal("aaa", a)

    a = "123"
    assert_equal("124", a.succ!)
    assert_equal("124", a)

    a = "999"
    assert_equal("1000", a.succ!)
    assert_equal("1000", a)

    a = "1999zzz"
    assert_equal("2000aaa", a.succ!)
    assert_equal("2000aaa", a)

    a = "ZZZZ999"
    assert_equal("AAAAA000", a.succ!)
    assert_equal("AAAAA000", a)

    a = "**"
    assert_equal("*+", a.succ!)
    assert_equal("*+", a)

    assert_equal("aaaaaaaaaaaa", "zzzzzzzzzzz".succ!)
    assert_equal("aaaaaaaaaaaaaaaaaaaaaaaa", "zzzzzzzzzzzzzzzzzzzzzzz".succ!)
  end
end