nayutaya-msgpack-pure 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +0 -2
- data/lib/msgpack_pure/core.rb +4 -2
- data/lib/msgpack_pure/packer.rb +81 -72
- data/lib/msgpack_pure/unpacker.rb +60 -54
- data/lib/msgpack_pure/version.rb +1 -1
- data/nayutaya-msgpack-pure.gemspec +2 -2
- data/test/packer_test.rb +72 -66
- data/test/unpacker_test.rb +14 -8
- metadata +2 -2
data/README.md
CHANGED
data/lib/msgpack_pure/core.rb
CHANGED
@@ -7,12 +7,14 @@ require "msgpack_pure/unpacker"
|
|
7
7
|
module MessagePackPure
|
8
8
|
def self.pack(value)
|
9
9
|
io = StringIO.new
|
10
|
-
Packer.
|
10
|
+
packer = Packer.new(io)
|
11
|
+
packer.write(value)
|
11
12
|
return io.string
|
12
13
|
end
|
13
14
|
|
14
15
|
def self.unpack(binary)
|
15
16
|
io = StringIO.new(binary, "r")
|
16
|
-
|
17
|
+
unpacker = Unpacker.new(io)
|
18
|
+
return unpacker.read
|
17
19
|
end
|
18
20
|
end
|
data/lib/msgpack_pure/packer.rb
CHANGED
@@ -4,189 +4,198 @@
|
|
4
4
|
# http://msgpack.sourceforge.jp/spec
|
5
5
|
|
6
6
|
module MessagePackPure
|
7
|
-
|
7
|
+
class Packer
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
def
|
11
|
+
class MessagePackPure::Packer
|
12
|
+
def initialize(io)
|
13
|
+
@io = io
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader :io
|
17
|
+
|
18
|
+
def write(value)
|
13
19
|
case value
|
14
|
-
when Integer then self.write_integer(
|
15
|
-
when NilClass then self.write_nil
|
16
|
-
when TrueClass then self.write_true
|
17
|
-
when FalseClass then self.write_false
|
18
|
-
when Float then self.write_float(
|
19
|
-
when String then self.write_string(
|
20
|
-
when Array then self.write_array(
|
21
|
-
when Hash then self.write_hash(
|
20
|
+
when Integer then self.write_integer(value)
|
21
|
+
when NilClass then self.write_nil
|
22
|
+
when TrueClass then self.write_true
|
23
|
+
when FalseClass then self.write_false
|
24
|
+
when Float then self.write_float(value)
|
25
|
+
when String then self.write_string(value)
|
26
|
+
when Array then self.write_array(value)
|
27
|
+
when Hash then self.write_hash(value)
|
22
28
|
else raise("unknown type")
|
23
29
|
end
|
24
|
-
|
30
|
+
|
31
|
+
return @io
|
25
32
|
end
|
26
33
|
|
27
|
-
|
34
|
+
protected
|
35
|
+
|
36
|
+
def write_integer(num)
|
28
37
|
case num
|
29
38
|
when (-0x20..0x7F)
|
30
39
|
# positive fixnum, negative fixnum
|
31
|
-
io.write(self.pack_int8(num))
|
40
|
+
@io.write(self.pack_int8(num))
|
32
41
|
when (0x00..0xFF)
|
33
42
|
# uint8
|
34
|
-
io.write("\xCC")
|
35
|
-
io.write(self.pack_uint8(num))
|
43
|
+
@io.write("\xCC")
|
44
|
+
@io.write(self.pack_uint8(num))
|
36
45
|
when (-0x80..0x7F)
|
37
46
|
# int8
|
38
|
-
io.write("\xD0")
|
39
|
-
io.write(self.pack_int8(num))
|
47
|
+
@io.write("\xD0")
|
48
|
+
@io.write(self.pack_int8(num))
|
40
49
|
when (0x0000..0xFFFF)
|
41
50
|
# uint16
|
42
|
-
io.write("\xCD")
|
43
|
-
io.write(self.pack_uint16(num))
|
51
|
+
@io.write("\xCD")
|
52
|
+
@io.write(self.pack_uint16(num))
|
44
53
|
when (-0x8000..0x7FFF)
|
45
54
|
# int16
|
46
|
-
io.write("\xD1")
|
47
|
-
io.write(self.pack_int16(num))
|
55
|
+
@io.write("\xD1")
|
56
|
+
@io.write(self.pack_int16(num))
|
48
57
|
when (0x00000000..0xFFFFFFFF)
|
49
58
|
# uint32
|
50
|
-
io.write("\xCE")
|
51
|
-
io.write(self.pack_uint32(num))
|
59
|
+
@io.write("\xCE")
|
60
|
+
@io.write(self.pack_uint32(num))
|
52
61
|
when (-0x80000000..0x7FFFFFFF)
|
53
62
|
# int32
|
54
|
-
io.write("\xD2")
|
55
|
-
io.write(self.pack_int32(num))
|
63
|
+
@io.write("\xD2")
|
64
|
+
@io.write(self.pack_int32(num))
|
56
65
|
when (0x0000000000000000..0xFFFFFFFFFFFFFFFF)
|
57
66
|
# uint64
|
58
|
-
io.write("\xCF")
|
59
|
-
io.write(self.pack_uint64(num))
|
67
|
+
@io.write("\xCF")
|
68
|
+
@io.write(self.pack_uint64(num))
|
60
69
|
when (-0x8000000000000000..0x7FFFFFFFFFFFFFFF)
|
61
70
|
# int64
|
62
|
-
io.write("\xD3")
|
63
|
-
io.write(self.pack_int64(num))
|
71
|
+
@io.write("\xD3")
|
72
|
+
@io.write(self.pack_int64(num))
|
64
73
|
else
|
65
74
|
raise("invalid integer")
|
66
75
|
end
|
67
76
|
end
|
68
77
|
|
69
|
-
def
|
70
|
-
io.write("\xC0")
|
78
|
+
def write_nil
|
79
|
+
@io.write("\xC0")
|
71
80
|
end
|
72
81
|
|
73
|
-
def
|
74
|
-
io.write("\xC3")
|
82
|
+
def write_true
|
83
|
+
@io.write("\xC3")
|
75
84
|
end
|
76
85
|
|
77
|
-
def
|
78
|
-
io.write("\xC2")
|
86
|
+
def write_false
|
87
|
+
@io.write("\xC2")
|
79
88
|
end
|
80
89
|
|
81
|
-
def
|
82
|
-
io.write("\xCB")
|
83
|
-
io.write(self.pack_double(value))
|
90
|
+
def write_float(value)
|
91
|
+
@io.write("\xCB")
|
92
|
+
@io.write(self.pack_double(value))
|
84
93
|
end
|
85
94
|
|
86
|
-
def
|
95
|
+
def write_string(value)
|
87
96
|
case value.size
|
88
97
|
when (0x00..0x1F)
|
89
98
|
# fixraw
|
90
|
-
io.write(self.pack_uint8(0b10100000 + value.size))
|
91
|
-
io.write(value)
|
99
|
+
@io.write(self.pack_uint8(0b10100000 + value.size))
|
100
|
+
@io.write(value)
|
92
101
|
when (0x0000..0xFFFF)
|
93
102
|
# raw16
|
94
|
-
io.write("\xDA")
|
95
|
-
io.write(self.pack_uint16(value.size))
|
96
|
-
io.write(value)
|
103
|
+
@io.write("\xDA")
|
104
|
+
@io.write(self.pack_uint16(value.size))
|
105
|
+
@io.write(value)
|
97
106
|
when (0x00000000..0xFFFFFFFF)
|
98
107
|
# raw32
|
99
|
-
io.write("\xDB")
|
100
|
-
io.write(self.pack_uint32(value.size))
|
101
|
-
io.write(value)
|
108
|
+
@io.write("\xDB")
|
109
|
+
@io.write(self.pack_uint32(value.size))
|
110
|
+
@io.write(value)
|
102
111
|
else
|
103
112
|
raise("invalid length")
|
104
113
|
end
|
105
114
|
end
|
106
115
|
|
107
|
-
def
|
116
|
+
def write_array(value)
|
108
117
|
case value.size
|
109
118
|
when (0x00..0x0F)
|
110
119
|
# fixarray
|
111
|
-
io.write(self.pack_uint8(0b10010000 + value.size))
|
120
|
+
@io.write(self.pack_uint8(0b10010000 + value.size))
|
112
121
|
when (0x0000..0xFFFF)
|
113
122
|
# array16
|
114
|
-
io.write("\xDC")
|
115
|
-
io.write(self.pack_uint16(value.size))
|
123
|
+
@io.write("\xDC")
|
124
|
+
@io.write(self.pack_uint16(value.size))
|
116
125
|
when (0x00000000..0xFFFFFFFF)
|
117
126
|
# array32
|
118
|
-
io.write("\xDD")
|
119
|
-
io.write(self.pack_uint32(value.size))
|
127
|
+
@io.write("\xDD")
|
128
|
+
@io.write(self.pack_uint32(value.size))
|
120
129
|
else
|
121
130
|
raise("invalid length")
|
122
131
|
end
|
123
132
|
|
124
133
|
value.each { |item|
|
125
|
-
self.write(
|
134
|
+
self.write(item)
|
126
135
|
}
|
127
136
|
end
|
128
137
|
|
129
|
-
def
|
138
|
+
def write_hash(value)
|
130
139
|
case value.size
|
131
140
|
when (0x00..0x0F)
|
132
141
|
# fixmap
|
133
|
-
io.write(self.pack_uint8(0b10000000 + value.size))
|
142
|
+
@io.write(self.pack_uint8(0b10000000 + value.size))
|
134
143
|
when (0x0000..0xFFFF)
|
135
144
|
# map16
|
136
|
-
io.write("\xDE")
|
137
|
-
io.write(self.pack_uint16(value.size))
|
145
|
+
@io.write("\xDE")
|
146
|
+
@io.write(self.pack_uint16(value.size))
|
138
147
|
when (0x00000000..0xFFFFFFFF)
|
139
148
|
# map32
|
140
|
-
io.write("\xDF")
|
141
|
-
io.write(self.pack_uint32(value.size))
|
149
|
+
@io.write("\xDF")
|
150
|
+
@io.write(self.pack_uint32(value.size))
|
142
151
|
else
|
143
152
|
raise("invalid length")
|
144
153
|
end
|
145
154
|
|
146
155
|
value.sort_by { |key, value| key }.each { |key, value|
|
147
|
-
self.write(
|
148
|
-
self.write(
|
156
|
+
self.write(key)
|
157
|
+
self.write(value)
|
149
158
|
}
|
150
159
|
end
|
151
160
|
|
152
|
-
def
|
161
|
+
def pack_uint8(value)
|
153
162
|
return [value].pack("C")
|
154
163
|
end
|
155
164
|
|
156
|
-
def
|
165
|
+
def pack_int8(value)
|
157
166
|
return [value].pack("c")
|
158
167
|
end
|
159
168
|
|
160
|
-
def
|
169
|
+
def pack_uint16(value)
|
161
170
|
return [value].pack("n")
|
162
171
|
end
|
163
172
|
|
164
|
-
def
|
173
|
+
def pack_int16(value)
|
165
174
|
value += (2 ** 16) if value < 0
|
166
175
|
return self.pack_uint16(value)
|
167
176
|
end
|
168
177
|
|
169
|
-
def
|
178
|
+
def pack_uint32(value)
|
170
179
|
return [value].pack("N")
|
171
180
|
end
|
172
181
|
|
173
|
-
def
|
182
|
+
def pack_int32(value)
|
174
183
|
value += (2 ** 32) if value < 0
|
175
184
|
return self.pack_uint32(value)
|
176
185
|
end
|
177
186
|
|
178
|
-
def
|
187
|
+
def pack_uint64(value)
|
179
188
|
high = (value >> 32)
|
180
189
|
low = (value & 0xFFFFFFFF)
|
181
190
|
return self.pack_uint32(high) + self.pack_uint32(low)
|
182
191
|
end
|
183
192
|
|
184
|
-
def
|
193
|
+
def pack_int64(value)
|
185
194
|
value += (2 ** 64) if value < 0
|
186
195
|
return self.pack_uint64(value)
|
187
196
|
end
|
188
197
|
|
189
|
-
def
|
198
|
+
def pack_double(value)
|
190
199
|
return [value].pack("G")
|
191
200
|
end
|
192
201
|
end
|
@@ -4,13 +4,19 @@
|
|
4
4
|
# http://msgpack.sourceforge.jp/spec
|
5
5
|
|
6
6
|
module MessagePackPure
|
7
|
-
|
7
|
+
class Unpacker
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
def
|
13
|
-
|
11
|
+
class MessagePackPure::Unpacker
|
12
|
+
def initialize(io)
|
13
|
+
@io = io
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader :io
|
17
|
+
|
18
|
+
def read
|
19
|
+
type = self.unpack_uint8
|
14
20
|
|
15
21
|
case
|
16
22
|
when (type & 0b10000000) == 0b00000000 # positive fixnum
|
@@ -19,13 +25,13 @@ module MessagePackPure::Unpacker
|
|
19
25
|
return (type & 0b00011111) - (2 ** 5)
|
20
26
|
when (type & 0b11100000) == 0b10100000 # fixraw
|
21
27
|
size = (type & 0b00011111)
|
22
|
-
return io.read(size)
|
28
|
+
return @io.read(size)
|
23
29
|
when (type & 0b11110000) == 0b10010000 # fixarray
|
24
30
|
size = (type & 0b00001111)
|
25
|
-
return self.read_array(
|
31
|
+
return self.read_array(size)
|
26
32
|
when (type & 0b11110000) == 0b10000000 # fixmap
|
27
33
|
size = (type & 0b00001111)
|
28
|
-
return self.read_hash(
|
34
|
+
return self.read_hash(size)
|
29
35
|
end
|
30
36
|
|
31
37
|
case type
|
@@ -36,101 +42,101 @@ module MessagePackPure::Unpacker
|
|
36
42
|
when 0xC3 # true
|
37
43
|
return true
|
38
44
|
when 0xCA # float
|
39
|
-
return self.unpack_float
|
45
|
+
return self.unpack_float
|
40
46
|
when 0xCB # double
|
41
|
-
return self.unpack_double
|
47
|
+
return self.unpack_double
|
42
48
|
when 0xCC # uint8
|
43
|
-
return self.unpack_uint8
|
49
|
+
return self.unpack_uint8
|
44
50
|
when 0xCD # uint16
|
45
|
-
return self.unpack_uint16
|
51
|
+
return self.unpack_uint16
|
46
52
|
when 0xCE # uint32
|
47
|
-
return self.unpack_uint32
|
53
|
+
return self.unpack_uint32
|
48
54
|
when 0xCF # uint64
|
49
|
-
return self.unpack_uint64
|
55
|
+
return self.unpack_uint64
|
50
56
|
when 0xD0 # int8
|
51
|
-
return self.unpack_int8
|
57
|
+
return self.unpack_int8
|
52
58
|
when 0xD1 # int16
|
53
|
-
return self.unpack_int16
|
59
|
+
return self.unpack_int16
|
54
60
|
when 0xD2 # int32
|
55
|
-
return self.unpack_int32
|
61
|
+
return self.unpack_int32
|
56
62
|
when 0xD3 # int64
|
57
|
-
return self.unpack_int64
|
63
|
+
return self.unpack_int64
|
58
64
|
when 0xDA # raw16
|
59
|
-
size = self.unpack_uint16
|
60
|
-
return io.read(size)
|
65
|
+
size = self.unpack_uint16
|
66
|
+
return @io.read(size)
|
61
67
|
when 0xDB # raw32
|
62
|
-
size = self.unpack_uint32
|
63
|
-
return io.read(size)
|
68
|
+
size = self.unpack_uint32
|
69
|
+
return @io.read(size)
|
64
70
|
when 0xDC # array16
|
65
|
-
size = self.unpack_uint16
|
66
|
-
return self.read_array(
|
71
|
+
size = self.unpack_uint16
|
72
|
+
return self.read_array(size)
|
67
73
|
when 0xDD # array32
|
68
|
-
size = self.unpack_uint32
|
69
|
-
return self.read_array(
|
74
|
+
size = self.unpack_uint32
|
75
|
+
return self.read_array(size)
|
70
76
|
when 0xDE # map16
|
71
|
-
size = self.unpack_uint16
|
72
|
-
return self.read_hash(
|
77
|
+
size = self.unpack_uint16
|
78
|
+
return self.read_hash(size)
|
73
79
|
when 0xDF # map32
|
74
|
-
size = self.unpack_uint32
|
75
|
-
return self.read_hash(
|
80
|
+
size = self.unpack_uint32
|
81
|
+
return self.read_hash(size)
|
76
82
|
else
|
77
83
|
raise("Unknown Type -- #{'0x%02X' % type}")
|
78
84
|
end
|
79
85
|
end
|
80
86
|
|
81
|
-
def
|
82
|
-
return size.times.map { self.read
|
87
|
+
def read_array(size)
|
88
|
+
return size.times.map { self.read }
|
83
89
|
end
|
84
90
|
|
85
|
-
def
|
91
|
+
def read_hash(size)
|
86
92
|
return size.times.inject({}) { |memo,|
|
87
|
-
memo[self.read
|
93
|
+
memo[self.read] = self.read
|
88
94
|
memo
|
89
95
|
}
|
90
96
|
end
|
91
97
|
|
92
|
-
def
|
93
|
-
return io.read(1).unpack("C")[0]
|
98
|
+
def unpack_uint8
|
99
|
+
return @io.read(1).unpack("C")[0]
|
94
100
|
end
|
95
101
|
|
96
|
-
def
|
97
|
-
return io.read(1).unpack("c")[0]
|
102
|
+
def unpack_int8
|
103
|
+
return @io.read(1).unpack("c")[0]
|
98
104
|
end
|
99
105
|
|
100
|
-
def
|
101
|
-
return io.read(2).unpack("n")[0]
|
106
|
+
def unpack_uint16
|
107
|
+
return @io.read(2).unpack("n")[0]
|
102
108
|
end
|
103
109
|
|
104
|
-
def
|
105
|
-
num = self.unpack_uint16
|
110
|
+
def unpack_int16
|
111
|
+
num = self.unpack_uint16
|
106
112
|
return (num < 2 ** 15 ? num : num - (2 ** 16))
|
107
113
|
end
|
108
114
|
|
109
|
-
def
|
110
|
-
return io.read(4).unpack("N")[0]
|
115
|
+
def unpack_uint32
|
116
|
+
return @io.read(4).unpack("N")[0]
|
111
117
|
end
|
112
118
|
|
113
|
-
def
|
114
|
-
num = self.unpack_uint32
|
119
|
+
def unpack_int32
|
120
|
+
num = self.unpack_uint32
|
115
121
|
return (num < 2 ** 31 ? num : num - (2 ** 32))
|
116
122
|
end
|
117
123
|
|
118
|
-
def
|
119
|
-
high = self.unpack_uint32
|
120
|
-
low = self.unpack_uint32
|
124
|
+
def unpack_uint64
|
125
|
+
high = self.unpack_uint32
|
126
|
+
low = self.unpack_uint32
|
121
127
|
return (high << 32) + low
|
122
128
|
end
|
123
129
|
|
124
|
-
def
|
125
|
-
num = self.unpack_uint64
|
130
|
+
def unpack_int64
|
131
|
+
num = self.unpack_uint64
|
126
132
|
return (num < 2 ** 63 ? num : num - (2 ** 64))
|
127
133
|
end
|
128
134
|
|
129
|
-
def
|
130
|
-
return io.read(4).unpack("g")[0]
|
135
|
+
def unpack_float
|
136
|
+
return @io.read(4).unpack("g")[0]
|
131
137
|
end
|
132
138
|
|
133
|
-
def
|
134
|
-
return io.read(8).unpack("G")[0]
|
139
|
+
def unpack_double
|
140
|
+
return @io.read(8).unpack("G")[0]
|
135
141
|
end
|
136
142
|
end
|
data/lib/msgpack_pure/version.rb
CHANGED
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
|
6
6
|
|
7
7
|
s.name = "nayutaya-msgpack-pure"
|
8
|
-
s.version = "0.0.
|
9
|
-
s.date = "2010-03-
|
8
|
+
s.version = "0.0.2"
|
9
|
+
s.date = "2010-03-09"
|
10
10
|
|
11
11
|
s.authors = ["Yuya Kato"]
|
12
12
|
s.email = "yuyakato@gmail.com"
|
data/test/packer_test.rb
CHANGED
@@ -7,187 +7,193 @@ require "msgpack_pure/packer"
|
|
7
7
|
|
8
8
|
class PackerTest < Test::Unit::TestCase
|
9
9
|
def setup
|
10
|
-
@
|
10
|
+
@klass = MessagePackPure::Packer
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_initialize
|
14
|
+
io = StringIO.new
|
15
|
+
packer = @klass.new(io)
|
16
|
+
assert_same(io, packer.io)
|
11
17
|
end
|
12
18
|
|
13
19
|
def test_write__positive_fixnum
|
14
|
-
assert_equal("\x00", @
|
15
|
-
assert_equal("\x01", @
|
16
|
-
assert_equal("\x7F", @
|
20
|
+
assert_equal("\x00", @klass.new(sio).write(0x00).string)
|
21
|
+
assert_equal("\x01", @klass.new(sio).write(0x01).string)
|
22
|
+
assert_equal("\x7F", @klass.new(sio).write(0x7F).string)
|
17
23
|
end
|
18
24
|
|
19
25
|
def test_write__negative_fixnum
|
20
|
-
assert_equal("\xFF", @
|
21
|
-
assert_equal("\xE0", @
|
26
|
+
assert_equal("\xFF", @klass.new(sio).write(-0x01).string)
|
27
|
+
assert_equal("\xE0", @klass.new(sio).write(-0x20).string)
|
22
28
|
end
|
23
29
|
|
24
30
|
def test_write__uint8
|
25
|
-
assert_equal("\xCC\x80", @
|
26
|
-
assert_equal("\xCC\xFF", @
|
31
|
+
assert_equal("\xCC\x80", @klass.new(sio).write(0x80).string)
|
32
|
+
assert_equal("\xCC\xFF", @klass.new(sio).write(0xFF).string)
|
27
33
|
end
|
28
34
|
|
29
35
|
def test_write__uint16
|
30
|
-
assert_equal("\xCD\x01\x00", @
|
31
|
-
assert_equal("\xCD\xFF\xFF", @
|
36
|
+
assert_equal("\xCD\x01\x00", @klass.new(sio).write(0x0100).string)
|
37
|
+
assert_equal("\xCD\xFF\xFF", @klass.new(sio).write(0xFFFF).string)
|
32
38
|
end
|
33
39
|
|
34
40
|
def test_write__uint32
|
35
|
-
assert_equal("\xCE\x00\x01\x00\x00", @
|
36
|
-
assert_equal("\xCE\xFF\xFF\xFF\xFF", @
|
41
|
+
assert_equal("\xCE\x00\x01\x00\x00", @klass.new(sio).write(0x00010000).string)
|
42
|
+
assert_equal("\xCE\xFF\xFF\xFF\xFF", @klass.new(sio).write(0xFFFFFFFF).string)
|
37
43
|
end
|
38
44
|
|
39
45
|
def test_write__uint64
|
40
|
-
assert_equal("\xCF\x00\x00\x00\x01\x00\x00\x00\x00", @
|
41
|
-
assert_equal("\xCF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", @
|
46
|
+
assert_equal("\xCF\x00\x00\x00\x01\x00\x00\x00\x00", @klass.new(sio).write(0x0000000100000000).string)
|
47
|
+
assert_equal("\xCF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", @klass.new(sio).write(0xFFFFFFFFFFFFFFFF).string)
|
42
48
|
end
|
43
49
|
|
44
50
|
def test_write__int8
|
45
|
-
assert_equal("\xD0\xDF", @
|
46
|
-
assert_equal("\xD0\x80", @
|
51
|
+
assert_equal("\xD0\xDF", @klass.new(sio).write(-0x21).string)
|
52
|
+
assert_equal("\xD0\x80", @klass.new(sio).write(-0x80).string)
|
47
53
|
end
|
48
54
|
|
49
55
|
def test_write__int16
|
50
|
-
assert_equal("\xD1\xFF\x7F", @
|
51
|
-
assert_equal("\xD1\x80\x00", @
|
56
|
+
assert_equal("\xD1\xFF\x7F", @klass.new(sio).write(-0x0081).string)
|
57
|
+
assert_equal("\xD1\x80\x00", @klass.new(sio).write(-0x8000).string)
|
52
58
|
end
|
53
59
|
|
54
60
|
def test_write__int32
|
55
|
-
assert_equal("\xD2\xFF\xFF\x7F\xFF", @
|
56
|
-
assert_equal("\xD2\x80\x00\x00\x00", @
|
61
|
+
assert_equal("\xD2\xFF\xFF\x7F\xFF", @klass.new(sio).write(-0x00008001).string)
|
62
|
+
assert_equal("\xD2\x80\x00\x00\x00", @klass.new(sio).write(-0x80000000).string)
|
57
63
|
end
|
58
64
|
|
59
65
|
def test_write__int64
|
60
|
-
assert_equal("\xD3\xFF\xFF\xFF\xFF\x7F\xFF\xFF\xFF", @
|
61
|
-
assert_equal("\xD3\x80\x00\x00\x00\x00\x00\x00\x00", @
|
66
|
+
assert_equal("\xD3\xFF\xFF\xFF\xFF\x7F\xFF\xFF\xFF", @klass.new(sio).write(-0x0000000080000001).string)
|
67
|
+
assert_equal("\xD3\x80\x00\x00\x00\x00\x00\x00\x00", @klass.new(sio).write(-0x8000000000000000).string)
|
62
68
|
end
|
63
69
|
|
64
70
|
def test_write__nil
|
65
|
-
assert_equal("\xC0", @
|
71
|
+
assert_equal("\xC0", @klass.new(sio).write(nil).string)
|
66
72
|
end
|
67
73
|
|
68
74
|
def test_write__true
|
69
|
-
assert_equal("\xC3", @
|
75
|
+
assert_equal("\xC3", @klass.new(sio).write(true).string)
|
70
76
|
end
|
71
77
|
|
72
78
|
def test_write__false
|
73
|
-
assert_equal("\xC2", @
|
79
|
+
assert_equal("\xC2", @klass.new(sio).write(false).string)
|
74
80
|
end
|
75
81
|
|
76
82
|
def test_write__float
|
77
|
-
assert_equal("\xCB\x00\x00\x00\x00\x00\x00\x00\x00", @
|
78
|
-
assert_equal("\xCB\x3F\xE0\x00\x00\x00\x00\x00\x00", @
|
79
|
-
assert_equal("\xCB\xBF\xE0\x00\x00\x00\x00\x00\x00", @
|
83
|
+
assert_equal("\xCB\x00\x00\x00\x00\x00\x00\x00\x00", @klass.new(sio).write(+0.0).string)
|
84
|
+
assert_equal("\xCB\x3F\xE0\x00\x00\x00\x00\x00\x00", @klass.new(sio).write(+0.5).string)
|
85
|
+
assert_equal("\xCB\xBF\xE0\x00\x00\x00\x00\x00\x00", @klass.new(sio).write(-0.5).string)
|
80
86
|
end
|
81
87
|
|
82
88
|
def test_write__fixraw
|
83
|
-
assert_equal("\xA0", @
|
84
|
-
assert_equal("\xA3ABC", @
|
89
|
+
assert_equal("\xA0", @klass.new(sio).write("").string)
|
90
|
+
assert_equal("\xA3ABC", @klass.new(sio).write("ABC").string)
|
85
91
|
assert_equal(
|
86
92
|
"\xBF" + "A" * 31,
|
87
|
-
@
|
93
|
+
@klass.new(sio).write("A" * 31).string)
|
88
94
|
end
|
89
95
|
|
90
96
|
def test_write__raw16
|
91
97
|
assert_equal(
|
92
98
|
"\xDA\x00\x20" + "A" * 0x0020,
|
93
|
-
@
|
99
|
+
@klass.new(sio).write("A" * 0x0020).string)
|
94
100
|
assert_equal(
|
95
101
|
"\xDA\xFF\xFF" + "A" * 0xFFFF,
|
96
|
-
@
|
102
|
+
@klass.new(sio).write("A" * 0xFFFF).string)
|
97
103
|
end
|
98
104
|
|
99
105
|
def test_write__raw32
|
100
106
|
assert_equal(
|
101
107
|
"\xDB\x00\x01\x00\x00" + "A" * 0x00010000,
|
102
|
-
@
|
108
|
+
@klass.new(sio).write("A" * 0x00010000).string)
|
103
109
|
end
|
104
110
|
|
105
111
|
def test_write__fixarray
|
106
|
-
assert_equal("\x90", @
|
107
|
-
assert_equal("\x93\x00\x01\x02", @
|
112
|
+
assert_equal("\x90", @klass.new(sio).write([]).string)
|
113
|
+
assert_equal("\x93\x00\x01\x02", @klass.new(sio).write([0, 1, 2]).string)
|
108
114
|
|
109
|
-
|
115
|
+
packer = @klass.new(StringIO.new("\x9F", "a+"))
|
110
116
|
array = 0x0F.times.map { |i|
|
111
|
-
|
117
|
+
packer.write(i)
|
112
118
|
i
|
113
119
|
}
|
114
|
-
assert_equal(io.string, @
|
120
|
+
assert_equal(packer.io.string, @klass.new(sio).write(array).string)
|
115
121
|
end
|
116
122
|
|
117
123
|
def test_write__array16_min
|
118
|
-
|
124
|
+
packer = @klass.new(StringIO.new("\xDC\x00\x10", "a+"))
|
119
125
|
array = 0x0010.times.map { |i|
|
120
|
-
|
126
|
+
packer.write(i)
|
121
127
|
i
|
122
128
|
}
|
123
|
-
assert_equal(io.string, @
|
129
|
+
assert_equal(packer.io.string, @klass.new(sio).write(array).string)
|
124
130
|
end
|
125
131
|
|
126
132
|
def test_write__array16_max
|
127
|
-
|
133
|
+
packer = @klass.new(StringIO.new("\xDC\xFF\xFF", "a+"))
|
128
134
|
array = 0xFFFF.times.map { |i|
|
129
|
-
|
135
|
+
packer.write(i)
|
130
136
|
i
|
131
137
|
}
|
132
|
-
assert_equal(io.string, @
|
138
|
+
assert_equal(packer.io.string, @klass.new(sio).write(array).string)
|
133
139
|
end
|
134
140
|
|
135
141
|
def test_write__array32_min
|
136
|
-
|
142
|
+
packer = @klass.new(StringIO.new("\xDD\x00\x01\x00\x00", "a+"))
|
137
143
|
array = 0x00010000.times.map { |i|
|
138
|
-
|
144
|
+
packer.write(i)
|
139
145
|
i
|
140
146
|
}
|
141
|
-
assert_equal(io.string, @
|
147
|
+
assert_equal(packer.io.string, @klass.new(sio).write(array).string)
|
142
148
|
end
|
143
149
|
|
144
150
|
def test_write__fixmap
|
145
|
-
assert_equal("\x80", @
|
151
|
+
assert_equal("\x80", @klass.new(sio).write({}).string)
|
146
152
|
assert_equal(
|
147
153
|
"\x82\x00\x01\x02\x03",
|
148
|
-
@
|
154
|
+
@klass.new(sio).write({0 => 1, 2 => 3}).string)
|
149
155
|
|
150
|
-
|
156
|
+
packer = @klass.new(StringIO.new("\x8F", "a+"))
|
151
157
|
hash = 0x0F.times.inject({}) { |memo, i|
|
152
|
-
|
153
|
-
|
158
|
+
packer.write(i)
|
159
|
+
packer.write(0)
|
154
160
|
memo[i] = 0
|
155
161
|
memo
|
156
162
|
}
|
157
|
-
assert_equal(io.string, @
|
163
|
+
assert_equal(packer.io.string, @klass.new(sio).write(hash).string)
|
158
164
|
end
|
159
165
|
|
160
166
|
def test_write__map16_min
|
161
|
-
|
167
|
+
packer = @klass.new(StringIO.new("\xDE\x00\x10", "a+"))
|
162
168
|
hash = 0x0010.times.inject({}) { |memo, i|
|
163
|
-
|
164
|
-
|
169
|
+
packer.write(i)
|
170
|
+
packer.write(0)
|
165
171
|
memo[i] = 0
|
166
172
|
memo
|
167
173
|
}
|
168
|
-
assert_equal(io.string, @
|
174
|
+
assert_equal(packer.io.string, @klass.new(sio).write(hash).string)
|
169
175
|
end
|
170
176
|
|
171
177
|
def test_write__map16_max
|
172
|
-
|
178
|
+
packer = @klass.new(StringIO.new("\xDE\xFF\xFF", "a+"))
|
173
179
|
hash = 0xFFFF.times.inject({}) { |memo, i|
|
174
|
-
|
175
|
-
|
180
|
+
packer.write(i)
|
181
|
+
packer.write(0)
|
176
182
|
memo[i] = 0
|
177
183
|
memo
|
178
184
|
}
|
179
|
-
assert_equal(io.string, @
|
185
|
+
assert_equal(packer.io.string, @klass.new(sio).write(hash).string)
|
180
186
|
end
|
181
187
|
|
182
188
|
def test_write__map32_min
|
183
|
-
|
189
|
+
packer = @klass.new(StringIO.new("\xDF\x00\x01\x00\x00", "a+"))
|
184
190
|
hash = 0x00010000.times.inject({}) { |memo, i|
|
185
|
-
|
186
|
-
|
191
|
+
packer.write(i)
|
192
|
+
packer.write(0)
|
187
193
|
memo[i] = 0
|
188
194
|
memo
|
189
195
|
}
|
190
|
-
assert_equal(io.string, @
|
196
|
+
assert_equal(packer.io.string, @klass.new(sio).write(hash).string)
|
191
197
|
end
|
192
198
|
|
193
199
|
private
|
data/test/unpacker_test.rb
CHANGED
@@ -7,7 +7,13 @@ require "msgpack_pure/unpacker"
|
|
7
7
|
|
8
8
|
class UnpackerTest < Test::Unit::TestCase
|
9
9
|
def setup
|
10
|
-
@
|
10
|
+
@klass = MessagePackPure::Unpacker
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_initialize
|
14
|
+
io = StringIO.new
|
15
|
+
unpacker = @klass.new(io)
|
16
|
+
assert_same(io, unpacker.io)
|
11
17
|
end
|
12
18
|
|
13
19
|
def test_read__positive_fixnum
|
@@ -127,7 +133,7 @@ class UnpackerTest < Test::Unit::TestCase
|
|
127
133
|
i
|
128
134
|
}
|
129
135
|
io.rewind
|
130
|
-
assert_equal(array, @
|
136
|
+
assert_equal(array, @klass.new(io).read)
|
131
137
|
end
|
132
138
|
|
133
139
|
def test_read__array16
|
@@ -140,7 +146,7 @@ class UnpackerTest < Test::Unit::TestCase
|
|
140
146
|
i
|
141
147
|
}
|
142
148
|
io.rewind
|
143
|
-
assert_equal(array, @
|
149
|
+
assert_equal(array, @klass.new(io).read)
|
144
150
|
end
|
145
151
|
|
146
152
|
def test_read__array32
|
@@ -153,7 +159,7 @@ class UnpackerTest < Test::Unit::TestCase
|
|
153
159
|
i
|
154
160
|
}
|
155
161
|
io.rewind
|
156
|
-
assert_equal(array, @
|
162
|
+
assert_equal(array, @klass.new(io).read)
|
157
163
|
end
|
158
164
|
|
159
165
|
def test_read__fixmap
|
@@ -170,7 +176,7 @@ class UnpackerTest < Test::Unit::TestCase
|
|
170
176
|
memo
|
171
177
|
}
|
172
178
|
io.rewind
|
173
|
-
assert_equal(hash, @
|
179
|
+
assert_equal(hash, @klass.new(io).read)
|
174
180
|
end
|
175
181
|
|
176
182
|
def test_read__map16
|
@@ -187,7 +193,7 @@ class UnpackerTest < Test::Unit::TestCase
|
|
187
193
|
memo
|
188
194
|
}
|
189
195
|
io.rewind
|
190
|
-
assert_equal(hash, @
|
196
|
+
assert_equal(hash, @klass.new(io).read)
|
191
197
|
end
|
192
198
|
|
193
199
|
def test_read__map32
|
@@ -204,12 +210,12 @@ class UnpackerTest < Test::Unit::TestCase
|
|
204
210
|
memo
|
205
211
|
}
|
206
212
|
io.rewind
|
207
|
-
assert_equal(hash, @
|
213
|
+
assert_equal(hash, @klass.new(io).read)
|
208
214
|
end
|
209
215
|
|
210
216
|
private
|
211
217
|
|
212
218
|
def read(binary)
|
213
|
-
return @
|
219
|
+
return @klass.new(StringIO.new(binary, "r")).read
|
214
220
|
end
|
215
221
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nayutaya-msgpack-pure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuya Kato
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-03-
|
12
|
+
date: 2010-03-09 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|