# # MessagePack format test case # begin require 'rubygems' rescue LoadError end require 'msgpack' require 'json' source = <<EOF c2 # false c3 # true c0 # nil 00 # 0 Positive FixNum cc 00 # 0 uint8 cd 00 00 # 0 uint16 ce 00 00 00 00 # 0 uint32 cf 00 00 00 00 00 00 00 00 # 0 uint64 d0 00 # 0 int8 d1 00 00 # 0 int16 d2 00 00 00 00 # 0 int32 d3 00 00 00 00 00 00 00 00 # 0 int64 ff # -1 Negative FixNum d0 ff # -1 int8 d1 ff ff # -1 int16 d2 ff ff ff ff # -1 int32 d3 ff ff ff ff ff ff ff ff # -1 int64 7f # 127 Positive FixNum cc 7f # 127 uint8 cd 00 ff # 255 uint16 ce 00 00 ff ff # 65535 uint32 cf 00 00 00 00 ff ff ff ff # 4294967295 uint64 e0 # -32 Negative FixNum d0 e0 # -32 int8 d1 ff 80 # -128 int16 d2 ff ff 80 00 # -32768 int32 d3 ff ff ff ff 80 00 00 00 # -2147483648 int64 #ca 00 00 00 00 # 0.0 float cb 00 00 00 00 00 00 00 00 # 0.0 double #ca 80 00 00 00 # -0.0 float cb 80 00 00 00 00 00 00 00 # -0.0 double cb 3f f0 00 00 00 00 00 00 # 1.0 double cb bf f0 00 00 00 00 00 00 # -1.0 double a1 61 # "a" FixRaw da 00 01 61 # "a" raw 16 db 00 00 00 01 61 # "a" raw 32 a0 # "" FixRaw da 00 00 # "" raw 16 db 00 00 00 00 # "" raw 32 91 00 # [0] FixArray dc 00 01 00 # [0] array 16 dd 00 00 00 01 00 # [0] array 32 90 # [] FixArray dc 00 00 # [] array 16 dd 00 00 00 00 # [] array 32 80 # {} FixMap de 00 00 # {} map 16 df 00 00 00 00 # {} map 32 81 a1 61 61 # {"a"=>97} FixMap de 00 01 a1 61 61 # {"a"=>97} map 16 df 00 00 00 01 a1 61 61 # {"a"=>97} map 32 91 90 # [[]] 91 91 a1 61 # [["a"]] EOF source.gsub!(/\#.+$/,'') bytes = source.strip.split(/\s+/).map {|x| x.to_i(16) }.pack('C*') objs = [] compact_bytes = "" pac = MessagePack::Unpacker.new pac.feed(bytes) pac.each {|obj| p obj objs << obj compact_bytes << obj.to_msgpack } json = objs.to_json # self check cpac = MessagePack::Unpacker.new cpac.feed(compact_bytes) cpac.each {|cobj| obj = objs.shift if obj != cobj puts "** SELF CHECK FAILED **" puts "expected: #{obj.inspect}" puts "actual: #{cobj.inspect}" exit 1 end } File.open("cases.mpac","w") {|f| f.write(bytes) } File.open("cases_compact.mpac","w") {|f| f.write(compact_bytes) } File.open("cases.json","w") {|f| f.write(json) }