~ubuntu-branches/ubuntu/quantal/ruby1.9.1/quantal

« back to all changes in this revision

Viewing changes to test/ruby/test_pack.rb

  • Committer: Bazaar Package Importer
  • Author(s): Lucas Nussbaum
  • Date: 2011-09-24 19:16:17 UTC
  • mfrom: (1.1.8 upstream) (13.1.7 experimental)
  • Revision ID: james.westby@ubuntu.com-20110924191617-o1qz4rcmqjot8zuy
Tags: 1.9.3~rc1-1
* New upstream release: 1.9.3 RC1.
  + Includes load.c fixes. Closes: #639959.
* Upload to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
70
70
    assert_equal [1,1,1], "\000\000\000\001\000\000\000\001\000\000\000\001".unpack('N*')
71
71
  end
72
72
 
 
73
  def _integer_big_endian(mod='')
 
74
    assert_equal("\x01\x02", [0x0102].pack("s"+mod))
 
75
    assert_equal("\x01\x02", [0x0102].pack("S"+mod))
 
76
    assert_equal("\x01\x02\x03\x04", [0x01020304].pack("l"+mod))
 
77
    assert_equal("\x01\x02\x03\x04", [0x01020304].pack("L"+mod))
 
78
    assert_equal("\x01\x02\x03\x04\x05\x06\x07\x08", [0x0102030405060708].pack("q"+mod))
 
79
    assert_equal("\x01\x02\x03\x04\x05\x06\x07\x08", [0x0102030405060708].pack("Q"+mod))
 
80
    assert_match(/\A\x00*\x01\x02\z/, [0x0102].pack("s!"+mod))
 
81
    assert_match(/\A\x00*\x01\x02\z/, [0x0102].pack("S!"+mod))
 
82
    assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("i"+mod))
 
83
    assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("I"+mod))
 
84
    assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("i!"+mod))
 
85
    assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("I!"+mod))
 
86
    assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("l!"+mod))
 
87
    assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("L!"+mod))
 
88
    %w[s S l L q Q s! S! i I i! I! l! L!].each {|fmt|
 
89
      fmt += mod
 
90
      nuls = [0].pack(fmt)
 
91
      v = 0
 
92
      s = "".force_encoding("ascii-8bit")
 
93
      nuls.bytesize.times {|i|
 
94
        j = i + 40
 
95
        v = v * 256 + j
 
96
        s << [j].pack("C")
 
97
      }
 
98
      assert_equal(s, [v].pack(fmt), "[#{v}].pack(#{fmt.dump})")
 
99
      assert_equal([v], s.unpack(fmt), "#{s.dump}.unpack(#{fmt.dump})")
 
100
      s2 = s+s
 
101
      fmt2 = fmt+"*"
 
102
      assert_equal([v,v], s2.unpack(fmt2), "#{s2.dump}.unpack(#{fmt2.dump})")
 
103
    }
 
104
  end
 
105
 
 
106
  def _integer_little_endian(mod='')
 
107
    assert_equal("\x02\x01", [0x0102].pack("s"+mod))
 
108
    assert_equal("\x02\x01", [0x0102].pack("S"+mod))
 
109
    assert_equal("\x04\x03\x02\x01", [0x01020304].pack("l"+mod))
 
110
    assert_equal("\x04\x03\x02\x01", [0x01020304].pack("L"+mod))
 
111
    assert_equal("\x08\x07\x06\x05\x04\x03\x02\x01", [0x0102030405060708].pack("q"+mod))
 
112
    assert_equal("\x08\x07\x06\x05\x04\x03\x02\x01", [0x0102030405060708].pack("Q"+mod))
 
113
    assert_match(/\A\x02\x01\x00*\z/, [0x0102].pack("s!"+mod))
 
114
    assert_match(/\A\x02\x01\x00*\z/, [0x0102].pack("S!"+mod))
 
115
    assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("i"+mod))
 
116
    assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("I"+mod))
 
117
    assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("i!"+mod))
 
118
    assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("I!"+mod))
 
119
    assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("l!"+mod))
 
120
    assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("L!"+mod))
 
121
    %w[s S l L q Q s! S! i I i! I! l! L!].each {|fmt|
 
122
      fmt += mod
 
123
      nuls = [0].pack(fmt)
 
124
      v = 0
 
125
      s = "".force_encoding("ascii-8bit")
 
126
      nuls.bytesize.times {|i|
 
127
        j = i+40
 
128
        v = v * 256 + j
 
129
        s << [j].pack("C")
 
130
      }
 
131
      s.reverse!
 
132
      assert_equal(s, [v].pack(fmt), "[#{v}].pack(#{fmt.dump})")
 
133
      assert_equal([v], s.unpack(fmt), "#{s.dump}.unpack(#{fmt.dump})")
 
134
      s2 = s+s
 
135
      fmt2 = fmt+"*"
 
136
      assert_equal([v,v], s2.unpack(fmt2), "#{s2.dump}.unpack(#{fmt2.dump})")
 
137
    }
 
138
  end
 
139
 
73
140
  def test_integer_endian
74
141
    s = [1].pack("s")
75
 
    assert_includes(["\0\1", "\1\0"], s)
 
142
    assert_include(["\0\1", "\1\0"], s)
76
143
    if s == "\0\1"
77
 
      # big endian
78
 
      assert_equal("\x01\x02", [0x0102].pack("s"))
79
 
      assert_equal("\x01\x02", [0x0102].pack("S"))
80
 
      assert_equal("\x01\x02\x03\x04", [0x01020304].pack("l"))
81
 
      assert_equal("\x01\x02\x03\x04", [0x01020304].pack("L"))
82
 
      assert_equal("\x01\x02\x03\x04\x05\x06\x07\x08", [0x0102030405060708].pack("q"))
83
 
      assert_equal("\x01\x02\x03\x04\x05\x06\x07\x08", [0x0102030405060708].pack("Q"))
84
 
      assert_match(/\A\x00*\x01\x02\z/, [0x0102].pack("s!"))
85
 
      assert_match(/\A\x00*\x01\x02\z/, [0x0102].pack("S!"))
86
 
      assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("i"))
87
 
      assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("I"))
88
 
      assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("i!"))
89
 
      assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("I!"))
90
 
      assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("l!"))
91
 
      assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("L!"))
92
 
      %w[s S l L q Q s! S! i I i! I! l! L!].each {|fmt|
93
 
        nuls = [0].pack(fmt)
94
 
        v = 0
95
 
        s = "".force_encoding("ascii-8bit")
96
 
        nuls.bytesize.times {|i|
97
 
          j = i + 40
98
 
          v = v * 256 + j
99
 
          s << [j].pack("C")
100
 
        }
101
 
        assert_equal(s, [v].pack(fmt), "[#{v}].pack(#{fmt.dump})")
102
 
        assert_equal([v], s.unpack(fmt), "#{s.dump}.unpack(#{fmt.dump})")
103
 
        s2 = s+s
104
 
        fmt2 = fmt+"*"
105
 
        assert_equal([v,v], s2.unpack(fmt2), "#{s2.dump}.unpack(#{fmt2.dump})")
106
 
      }
 
144
      _integer_big_endian()
107
145
    else
108
 
      # little endian
109
 
      assert_equal("\x02\x01", [0x0102].pack("s"))
110
 
      assert_equal("\x02\x01", [0x0102].pack("S"))
111
 
      assert_equal("\x04\x03\x02\x01", [0x01020304].pack("l"))
112
 
      assert_equal("\x04\x03\x02\x01", [0x01020304].pack("L"))
113
 
      assert_equal("\x08\x07\x06\x05\x04\x03\x02\x01", [0x0102030405060708].pack("q"))
114
 
      assert_equal("\x08\x07\x06\x05\x04\x03\x02\x01", [0x0102030405060708].pack("Q"))
115
 
      assert_match(/\A\x02\x01\x00*\z/, [0x0102].pack("s!"))
116
 
      assert_match(/\A\x02\x01\x00*\z/, [0x0102].pack("S!"))
117
 
      assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("i"))
118
 
      assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("I"))
119
 
      assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("i!"))
120
 
      assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("I!"))
121
 
      assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("l!"))
122
 
      assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("L!"))
123
 
      %w[s S l L q Q s! S! i I i! I! l! L!].each {|fmt|
124
 
        nuls = [0].pack(fmt)
125
 
        v = 0
126
 
        s = "".force_encoding("ascii-8bit")
127
 
        nuls.bytesize.times {|i|
128
 
          j = i+40
129
 
          v = v * 256 + j
130
 
          s << [j].pack("C")
131
 
        }
132
 
        s.reverse!
133
 
        assert_equal(s, [v].pack(fmt), "[#{v}].pack(#{fmt.dump})")
134
 
        assert_equal([v], s.unpack(fmt), "#{s.dump}.unpack(#{fmt.dump})")
135
 
        s2 = s+s
136
 
        fmt2 = fmt+"*"
137
 
        assert_equal([v,v], s2.unpack(fmt2), "#{s2.dump}.unpack(#{fmt2.dump})")
138
 
      }
 
146
      _integer_little_endian()
139
147
    end
 
148
    assert_equal("\x01\x02\x02\x01", [0x0102,0x0102].pack("s>s<"))
 
149
    assert_equal([0x0102,0x0102], "\x01\x02\x02\x01".unpack("s>s<"))
 
150
  end
 
151
 
 
152
  def test_integer_endian_explicit
 
153
      _integer_big_endian('>')
 
154
      _integer_little_endian('<')
140
155
  end
141
156
 
142
157
  def test_pack_U