summaryrefslogtreecommitdiff
path: root/ruby/test_format.rb
blob: 99a27d1b423f2cd42b1ffa1843e021d50afbb108 (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
require 'msgpack'

@up = MessagePack::Unpacker.new

def check(bytes, should)
	puts "----"
	@up.reset
	src = bytes.pack('C*')
	ret = @up.execute(src, 0)
	if ret != src.length
		puts "** EXTRA BYTES **"
	end
	puts bytes.map{|x|"%x"%x}.join(' ')
	data = @up.data
	p data
	if data != should
		puts "** TEST FAILED **"
		p should
	end
end

# SimpleValue
check([
	0x93, 0xc0, 0xc2, 0xc3,
], [nil,false,true])

# Fixnum
check([
	0x92,
		0x93, 0x00, 0x40, 0x7f,
		0x93, 0xe0, 0xf0, 0xff,
], [[0,64,127], [-32,-16,-1]])

# FixArray
check([
	0x92,
		0x90,
		0x91,
			0x91, 0xc0,
], [[],[[nil]]])


# FixRaw
check([
	0x94,
		0xa0,
		0xa1, ?a,
		0xa2, ?b, ?c,
		0xa3, ?d, ?e, ?f,
], ["","a","bc","def"])

# FixMap
check([
	0x82,
		0xc2, 0x81,
			0xc0, 0xc0,
		0xc3, 0x81,
			0xc0, 0x80,
], {false=>{nil=>nil}, true=>{nil=>{}}})

# unsigned int
check([
	0x99,
		0xcc, 0,
		0xcc, 128,
		0xcc, 255,
		0xcd, 0x00, 0x00,
		0xcd, 0x80, 0x00,
		0xcd, 0xff, 0xff,
		0xce, 0x00, 0x00, 0x00, 0x00,
		0xce, 0x80, 0x00, 0x00, 0x00,
		0xce, 0xff, 0xff, 0xff, 0xff,
], [0, 128, 255, 0, 32768, 65535, 0, 2147483648, 4294967295])

# signed int
check([
	0x99,
		0xd0, 0,
		0xd0, 128,
		0xd0, 255,
		0xd1, 0x00, 0x00,
		0xd1, 0x80, 0x00,
		0xd1, 0xff, 0xff,
		0xd2, 0x00, 0x00, 0x00, 0x00,
		0xd2, 0x80, 0x00, 0x00, 0x00,
		0xd2, 0xff, 0xff, 0xff, 0xff,
], [0, -128, -1, 0, -32768, -1, 0, -2147483648, -1])

# raw
check([
	0x96,
		0xda, 0x00, 0x00,
		0xda, 0x00, 0x01, ?a,
		0xda, 0x00, 0x02, ?a, ?b,
		0xdb, 0x00, 0x00, 0x00, 0x00,
		0xdb, 0x00, 0x00, 0x00, 0x01, ?a,
		0xdb, 0x00, 0x00, 0x00, 0x02, ?a, ?b,
], ["", "a", "ab", "", "a", "ab"])

# array
check([
	0x96,
		0xdc, 0x00, 0x00,
		0xdc, 0x00, 0x01, 0xc0,
		0xdc, 0x00, 0x02, 0xc2, 0xc3,
		0xdd, 0x00, 0x00, 0x00, 0x00,
		0xdd, 0x00, 0x00, 0x00, 0x01, 0xc0,
		0xdd, 0x00, 0x00, 0x00, 0x02, 0xc2, 0xc3
], [[], [nil], [false,true], [], [nil], [false,true]])

# map
check([
	0x96,
		0xde, 0x00, 0x00,
		0xde, 0x00, 0x01, 0xc0, 0xc2,
		0xde, 0x00, 0x02, 0xc0, 0xc2, 0xc3, 0xc2,
		0xdf, 0x00, 0x00, 0x00, 0x00,
		0xdf, 0x00, 0x00, 0x00, 0x01, 0xc0, 0xc2,
		0xdf, 0x00, 0x00, 0x00, 0x02, 0xc0, 0xc2, 0xc3, 0xc2,
], [{}, {nil=>false}, {true=>false, nil=>false}, {}, {nil=>false}, {true=>false, nil=>false}])