aboutsummaryrefslogtreecommitdiffstats
path: root/test/ruby/test_pack.rb
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-14 13:12:56 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-14 13:12:56 +0000
commit5825359dd87a26d5daf7a604583baa0ab48cc543 (patch)
tree1eb6d5ca5ebd4c7e8159048d557264ecb2692486 /test/ruby/test_pack.rb
parentb1085abaeb5f19dd76ac5650c9c8ec50c1e4db02 (diff)
downloadruby-5825359dd87a26d5daf7a604583baa0ab48cc543.tar.gz
* pack.c (pack_pack): support endian modifiers: < and >.
[ruby-dev:42376] Feature #3491 * pack.c (pack_unpack): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29496 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_pack.rb')
-rw-r--r--test/ruby/test_pack.rb135
1 files changed, 74 insertions, 61 deletions
diff --git a/test/ruby/test_pack.rb b/test/ruby/test_pack.rb
index a4a6308299..6f746f2596 100644
--- a/test/ruby/test_pack.rb
+++ b/test/ruby/test_pack.rb
@@ -70,75 +70,88 @@ class TestPack < Test::Unit::TestCase
assert_equal [1,1,1], "\000\000\000\001\000\000\000\001\000\000\000\001".unpack('N*')
end
+ def _integer_big_endian(mod='')
+ assert_equal("\x01\x02", [0x0102].pack("s"+mod))
+ assert_equal("\x01\x02", [0x0102].pack("S"+mod))
+ assert_equal("\x01\x02\x03\x04", [0x01020304].pack("l"+mod))
+ assert_equal("\x01\x02\x03\x04", [0x01020304].pack("L"+mod))
+ assert_equal("\x01\x02\x03\x04\x05\x06\x07\x08", [0x0102030405060708].pack("q"+mod))
+ assert_equal("\x01\x02\x03\x04\x05\x06\x07\x08", [0x0102030405060708].pack("Q"+mod))
+ assert_match(/\A\x00*\x01\x02\z/, [0x0102].pack("s!"+mod))
+ assert_match(/\A\x00*\x01\x02\z/, [0x0102].pack("S!"+mod))
+ assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("i"+mod))
+ assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("I"+mod))
+ assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("i!"+mod))
+ assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("I!"+mod))
+ assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("l!"+mod))
+ assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("L!"+mod))
+ %w[s S l L q Q s! S! i I i! I! l! L!].each {|fmt|
+ fmt += mod
+ nuls = [0].pack(fmt)
+ v = 0
+ s = "".force_encoding("ascii-8bit")
+ nuls.bytesize.times {|i|
+ j = i + 40
+ v = v * 256 + j
+ s << [j].pack("C")
+ }
+ assert_equal(s, [v].pack(fmt), "[#{v}].pack(#{fmt.dump})")
+ assert_equal([v], s.unpack(fmt), "#{s.dump}.unpack(#{fmt.dump})")
+ s2 = s+s
+ fmt2 = fmt+"*"
+ assert_equal([v,v], s2.unpack(fmt2), "#{s2.dump}.unpack(#{fmt2.dump})")
+ }
+ end
+
+ def _integer_little_endian(mod='')
+ assert_equal("\x02\x01", [0x0102].pack("s"+mod))
+ assert_equal("\x02\x01", [0x0102].pack("S"+mod))
+ assert_equal("\x04\x03\x02\x01", [0x01020304].pack("l"+mod))
+ assert_equal("\x04\x03\x02\x01", [0x01020304].pack("L"+mod))
+ assert_equal("\x08\x07\x06\x05\x04\x03\x02\x01", [0x0102030405060708].pack("q"+mod))
+ assert_equal("\x08\x07\x06\x05\x04\x03\x02\x01", [0x0102030405060708].pack("Q"+mod))
+ assert_match(/\A\x02\x01\x00*\z/, [0x0102].pack("s!"+mod))
+ assert_match(/\A\x02\x01\x00*\z/, [0x0102].pack("S!"+mod))
+ assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("i"+mod))
+ assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("I"+mod))
+ assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("i!"+mod))
+ assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("I!"+mod))
+ assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("l!"+mod))
+ assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("L!"+mod))
+ %w[s S l L q Q s! S! i I i! I! l! L!].each {|fmt|
+ fmt += mod
+ nuls = [0].pack(fmt)
+ v = 0
+ s = "".force_encoding("ascii-8bit")
+ nuls.bytesize.times {|i|
+ j = i+40
+ v = v * 256 + j
+ s << [j].pack("C")
+ }
+ s.reverse!
+ assert_equal(s, [v].pack(fmt), "[#{v}].pack(#{fmt.dump})")
+ assert_equal([v], s.unpack(fmt), "#{s.dump}.unpack(#{fmt.dump})")
+ s2 = s+s
+ fmt2 = fmt+"*"
+ assert_equal([v,v], s2.unpack(fmt2), "#{s2.dump}.unpack(#{fmt2.dump})")
+ }
+ end
+
def test_integer_endian
s = [1].pack("s")
assert_includes(["\0\1", "\1\0"], s)
if s == "\0\1"
- # big endian
- assert_equal("\x01\x02", [0x0102].pack("s"))
- assert_equal("\x01\x02", [0x0102].pack("S"))
- assert_equal("\x01\x02\x03\x04", [0x01020304].pack("l"))
- assert_equal("\x01\x02\x03\x04", [0x01020304].pack("L"))
- assert_equal("\x01\x02\x03\x04\x05\x06\x07\x08", [0x0102030405060708].pack("q"))
- assert_equal("\x01\x02\x03\x04\x05\x06\x07\x08", [0x0102030405060708].pack("Q"))
- assert_match(/\A\x00*\x01\x02\z/, [0x0102].pack("s!"))
- assert_match(/\A\x00*\x01\x02\z/, [0x0102].pack("S!"))
- assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("i"))
- assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("I"))
- assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("i!"))
- assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("I!"))
- assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("l!"))
- assert_match(/\A\x00*\x01\x02\x03\x04\z/, [0x01020304].pack("L!"))
- %w[s S l L q Q s! S! i I i! I! l! L!].each {|fmt|
- nuls = [0].pack(fmt)
- v = 0
- s = "".force_encoding("ascii-8bit")
- nuls.bytesize.times {|i|
- j = i + 40
- v = v * 256 + j
- s << [j].pack("C")
- }
- assert_equal(s, [v].pack(fmt), "[#{v}].pack(#{fmt.dump})")
- assert_equal([v], s.unpack(fmt), "#{s.dump}.unpack(#{fmt.dump})")
- s2 = s+s
- fmt2 = fmt+"*"
- assert_equal([v,v], s2.unpack(fmt2), "#{s2.dump}.unpack(#{fmt2.dump})")
- }
+ _integer_big_endian()
else
- # little endian
- assert_equal("\x02\x01", [0x0102].pack("s"))
- assert_equal("\x02\x01", [0x0102].pack("S"))
- assert_equal("\x04\x03\x02\x01", [0x01020304].pack("l"))
- assert_equal("\x04\x03\x02\x01", [0x01020304].pack("L"))
- assert_equal("\x08\x07\x06\x05\x04\x03\x02\x01", [0x0102030405060708].pack("q"))
- assert_equal("\x08\x07\x06\x05\x04\x03\x02\x01", [0x0102030405060708].pack("Q"))
- assert_match(/\A\x02\x01\x00*\z/, [0x0102].pack("s!"))
- assert_match(/\A\x02\x01\x00*\z/, [0x0102].pack("S!"))
- assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("i"))
- assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("I"))
- assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("i!"))
- assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("I!"))
- assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("l!"))
- assert_match(/\A\x04\x03\x02\x01\x00*\z/, [0x01020304].pack("L!"))
- %w[s S l L q Q s! S! i I i! I! l! L!].each {|fmt|
- nuls = [0].pack(fmt)
- v = 0
- s = "".force_encoding("ascii-8bit")
- nuls.bytesize.times {|i|
- j = i+40
- v = v * 256 + j
- s << [j].pack("C")
- }
- s.reverse!
- assert_equal(s, [v].pack(fmt), "[#{v}].pack(#{fmt.dump})")
- assert_equal([v], s.unpack(fmt), "#{s.dump}.unpack(#{fmt.dump})")
- s2 = s+s
- fmt2 = fmt+"*"
- assert_equal([v,v], s2.unpack(fmt2), "#{s2.dump}.unpack(#{fmt2.dump})")
- }
+ _integer_little_endian()
end
end
+ def test_integer_endian_explicit
+ _integer_big_endian('>')
+ _integer_little_endian('<')
+ end
+
def test_pack_U
assert_raise(RangeError) { [-0x40000001].pack("U") }
assert_raise(RangeError) { [-0x40000000].pack("U") }