msgpack 1.3.3 → 1.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +99 -0
  3. data/README.md +293 -0
  4. data/ext/java/org/msgpack/jruby/Buffer.java +26 -19
  5. data/ext/java/org/msgpack/jruby/Decoder.java +46 -23
  6. data/ext/java/org/msgpack/jruby/Encoder.java +68 -30
  7. data/ext/java/org/msgpack/jruby/ExtensionRegistry.java +43 -64
  8. data/ext/java/org/msgpack/jruby/ExtensionValue.java +6 -9
  9. data/ext/java/org/msgpack/jruby/Factory.java +43 -42
  10. data/ext/java/org/msgpack/jruby/Packer.java +37 -40
  11. data/ext/java/org/msgpack/jruby/Unpacker.java +86 -68
  12. data/ext/msgpack/buffer.c +58 -85
  13. data/ext/msgpack/buffer.h +59 -20
  14. data/ext/msgpack/buffer_class.c +161 -52
  15. data/ext/msgpack/buffer_class.h +1 -0
  16. data/ext/msgpack/compat.h +1 -111
  17. data/ext/msgpack/extconf.rb +41 -23
  18. data/ext/msgpack/factory_class.c +143 -87
  19. data/ext/msgpack/packer.c +66 -43
  20. data/ext/msgpack/packer.h +25 -27
  21. data/ext/msgpack/packer_class.c +102 -130
  22. data/ext/msgpack/packer_class.h +11 -0
  23. data/ext/msgpack/packer_ext_registry.c +35 -40
  24. data/ext/msgpack/packer_ext_registry.h +41 -38
  25. data/ext/msgpack/rbinit.c +1 -1
  26. data/ext/msgpack/rmem.c +3 -4
  27. data/ext/msgpack/sysdep.h +5 -2
  28. data/ext/msgpack/unpacker.c +130 -126
  29. data/ext/msgpack/unpacker.h +22 -13
  30. data/ext/msgpack/unpacker_class.c +94 -124
  31. data/ext/msgpack/unpacker_class.h +11 -0
  32. data/ext/msgpack/unpacker_ext_registry.c +40 -28
  33. data/ext/msgpack/unpacker_ext_registry.h +21 -18
  34. data/lib/msgpack/bigint.rb +69 -0
  35. data/lib/msgpack/buffer.rb +9 -0
  36. data/lib/msgpack/factory.rb +140 -10
  37. data/lib/msgpack/packer.rb +10 -1
  38. data/lib/msgpack/symbol.rb +21 -4
  39. data/lib/msgpack/time.rb +1 -1
  40. data/lib/msgpack/unpacker.rb +14 -1
  41. data/lib/msgpack/version.rb +4 -8
  42. data/lib/msgpack.rb +7 -12
  43. data/msgpack.gemspec +9 -8
  44. metadata +37 -96
  45. data/.gitignore +0 -23
  46. data/.rubocop.yml +0 -36
  47. data/.travis.yml +0 -43
  48. data/Gemfile +0 -9
  49. data/README.rdoc +0 -225
  50. data/Rakefile +0 -78
  51. data/appveyor.yml +0 -18
  52. data/bench/pack.rb +0 -23
  53. data/bench/pack_log.rb +0 -33
  54. data/bench/pack_log_long.rb +0 -65
  55. data/bench/pack_symbols.rb +0 -28
  56. data/bench/run.sh +0 -14
  57. data/bench/run_long.sh +0 -35
  58. data/bench/run_symbols.sh +0 -26
  59. data/bench/unpack.rb +0 -21
  60. data/bench/unpack_log.rb +0 -34
  61. data/bench/unpack_log_long.rb +0 -67
  62. data/doclib/msgpack/buffer.rb +0 -193
  63. data/doclib/msgpack/core_ext.rb +0 -101
  64. data/doclib/msgpack/error.rb +0 -19
  65. data/doclib/msgpack/extension_value.rb +0 -9
  66. data/doclib/msgpack/factory.rb +0 -101
  67. data/doclib/msgpack/packer.rb +0 -208
  68. data/doclib/msgpack/time.rb +0 -22
  69. data/doclib/msgpack/timestamp.rb +0 -44
  70. data/doclib/msgpack/unpacker.rb +0 -183
  71. data/doclib/msgpack.rb +0 -87
  72. data/msgpack.org.md +0 -46
  73. data/spec/cases.json +0 -1
  74. data/spec/cases.msg +0 -0
  75. data/spec/cases_compact.msg +0 -0
  76. data/spec/cases_spec.rb +0 -39
  77. data/spec/cruby/buffer_io_spec.rb +0 -255
  78. data/spec/cruby/buffer_packer.rb +0 -29
  79. data/spec/cruby/buffer_spec.rb +0 -575
  80. data/spec/cruby/buffer_unpacker.rb +0 -19
  81. data/spec/cruby/unpacker_spec.rb +0 -70
  82. data/spec/ext_value_spec.rb +0 -99
  83. data/spec/exttypes.rb +0 -51
  84. data/spec/factory_spec.rb +0 -367
  85. data/spec/format_spec.rb +0 -301
  86. data/spec/jruby/benchmarks/shootout_bm.rb +0 -73
  87. data/spec/jruby/benchmarks/symbolize_keys_bm.rb +0 -25
  88. data/spec/jruby/unpacker_spec.rb +0 -186
  89. data/spec/msgpack_spec.rb +0 -214
  90. data/spec/pack_spec.rb +0 -61
  91. data/spec/packer_spec.rb +0 -557
  92. data/spec/random_compat.rb +0 -24
  93. data/spec/spec_helper.rb +0 -38
  94. data/spec/timestamp_spec.rb +0 -121
  95. data/spec/unpack_spec.rb +0 -57
  96. data/spec/unpacker_spec.rb +0 -716
@@ -1,22 +0,0 @@
1
- module MessagePack
2
-
3
- # MessagePack::Time provides packer and unpacker functions for a timestamp type.
4
- # @example Setup for DefaultFactory
5
- # MessagePack::DefaultFactory.register_type(
6
- # MessagePack::Timestamp::TYPE,
7
- # Time,
8
- # packer: MessagePack::Time::Packer,
9
- # unpacker: MessagePack::Time::Unpacker
10
- # )
11
- class Time
12
- # A packer function that packs a Time instance to a MessagePack timestamp.
13
- Packer = lambda { |payload|
14
- # ...
15
- }
16
-
17
- # An unpacker function that unpacks a MessagePack timestamp to a Time instance.
18
- Unpacker = lambda { |time|
19
- # ...
20
- }
21
- end
22
- end
@@ -1,44 +0,0 @@
1
- module MessagePack
2
- # A utility class for MessagePack timestamp type
3
- class Timestamp
4
- #
5
- # The timestamp extension type defined in the MessagePack spec.
6
- #
7
- # See https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type for details.
8
- #
9
- TYPE = -1
10
-
11
- # @return [Integer] Second part of the timestamp.
12
- attr_reader :sec
13
-
14
- # @return [Integer] Nanosecond part of the timestamp.
15
- attr_reader :nsec
16
-
17
- # @param [Integer] sec
18
- # @param [Integer] nsec
19
- def initialize(sec, nsec)
20
- end
21
-
22
- # @example An unpacker implementation for the Time class
23
- # lambda do |payload|
24
- # tv = MessagePack::Timestamp.from_msgpack_ext(payload)
25
- # Time.at(tv.sec, tv.nsec, :nanosecond)
26
- # end
27
- #
28
- # @param [String] data
29
- # @return [MessagePack::Timestamp]
30
- def self.from_msgpack_ext(data)
31
- end
32
-
33
- # @example A packer implementation for the Time class
34
- # unpacker = lambda do |time|
35
- # MessagePack::Timestamp.to_msgpack_ext(time.tv_sec, time.tv_nsec)
36
- # end
37
- #
38
- # @param [Integer] sec
39
- # @param [Integer] nsec
40
- # @return [String]
41
- def self.to_msgpack_ext(sec, nsec)
42
- end
43
- end
44
- end
@@ -1,183 +0,0 @@
1
- module MessagePack
2
-
3
- #
4
- # MessagePack::Unpacker is a class to deserialize objects.
5
- #
6
- class Unpacker
7
- #
8
- # Creates a MessagePack::Unpacker instance.
9
- #
10
- # @overload initialize(options={})
11
- # @param options [Hash]
12
- #
13
- # @overload initialize(io, options={})
14
- # @param io [IO]
15
- # @param options [Hash]
16
- # This unpacker reads data from the _io_ to fill the internal buffer.
17
- # _io_ must respond to readpartial(length [,string]) or read(length [,string]) method.
18
- #
19
- # Supported options:
20
- #
21
- # * *:symbolize_keys* deserialize keys of Hash objects as Symbol instead of String
22
- # * *:allow_unknown_ext* allow to deserialize ext type object with unknown type id as ExtensionValue instance. Otherwise (by default), unpacker throws UnknownExtTypeError.
23
- #
24
- # See also Buffer#initialize for other options.
25
- #
26
- def initialize(*args)
27
- end
28
-
29
- #
30
- # Register a new ext type to deserialize it. This method should be called with
31
- # Class and its class method name, or block, which returns a instance object.
32
- #
33
- # @overload register_type(type, &block)
34
- # @param type [Fixnum] type id (0-127) user defined type id for specified deserializer block
35
- # @yieldparam data [String] bytes(ASCII-8BIT String) represents serialized object, to be deserialized
36
- #
37
- # @overload register_type(type, klass, class_method_name)
38
- # @param type [Fixnum] type id (0-127) user defined type id for specified Class
39
- # @param klass [Class] Class to be serialized with speicifed type id
40
- # @param class_method_name [Symbol] class method which returns an instance object
41
- #
42
- # @return nil
43
- #
44
- def register_type(type, klass, method_name, &block)
45
- end
46
-
47
- #
48
- # Returns a list of registered types, ordered by type id.
49
- # Each element is a Hash object includes keys :type, :class and :unpacker.
50
- #
51
- # @return Array
52
- #
53
- def registered_types
54
- end
55
-
56
- #
57
- # Returns true/false which indicate specified class or type id is registered or not.
58
- #
59
- # @param klass_or_type [Class or Fixnum] Class or type id (0-127) to be checked
60
- # @return true or false
61
- #
62
- def type_registered?(klass_or_type)
63
- end
64
-
65
- #
66
- # Internal buffer
67
- #
68
- # @return [MessagePack::Buffer]
69
- #
70
- attr_reader :buffer
71
-
72
- #
73
- # Deserializes an object from the io or internal buffer and returns it.
74
- #
75
- # This method reads data from io into the internal buffer and deserializes an object
76
- # from the buffer. It repeats reading data from the io until enough data is available
77
- # to deserialize at least one object. After deserializing one object, unused data is
78
- # left in the internal buffer.
79
- #
80
- # If there're not enough data to deserialize one object, this method raises EOFError.
81
- # If data format is invalid, this method raises MessagePack::MalformedFormatError.
82
- # If the object nests too deeply, this method raises MessagePack::StackError.
83
- #
84
- # @return [Object] deserialized object
85
- #
86
- def read
87
- end
88
-
89
- alias unpack read
90
-
91
- #
92
- # Deserializes an object and ignores it. This method is faster than _read_.
93
- #
94
- # This method could raise the same errors with _read_.
95
- #
96
- # @return nil
97
- #
98
- def skip
99
- end
100
-
101
- #
102
- # Deserializes a nil value if it exists and returns _true_.
103
- # Otherwise, if a byte exists but the byte doesn't represent nil value,
104
- # returns _false_.
105
- #
106
- # If there're not enough data, this method raises EOFError.
107
- #
108
- # @return [Boolean]
109
- #
110
- def skip_nil
111
- end
112
-
113
- #
114
- # Read a header of an array and returns its size.
115
- # It converts a serialized array into a stream of elements.
116
- #
117
- # If the serialized object is not an array, it raises MessagePack::UnexpectedTypeError.
118
- # If there're not enough data, this method raises EOFError.
119
- #
120
- # @return [Integer] size of the array
121
- #
122
- def read_array_header
123
- end
124
-
125
- #
126
- # Reads a header of an map and returns its size.
127
- # It converts a serialized map into a stream of key-value pairs.
128
- #
129
- # If the serialized object is not a map, it raises MessagePack::UnexpectedTypeError.
130
- # If there're not enough data, this method raises EOFError.
131
- #
132
- # @return [Integer] size of the map
133
- #
134
- def read_map_header
135
- end
136
-
137
- #
138
- # Appends data into the internal buffer.
139
- # This method is equivalent to unpacker.buffer.append(data).
140
- #
141
- # @param data [String]
142
- # @return [Unpacker] self
143
- #
144
- def feed(data)
145
- end
146
-
147
- #
148
- # Repeats to deserialize objects.
149
- #
150
- # It repeats until the io or internal buffer does not include any complete objects.
151
- #
152
- # If the an IO is set, it repeats to read data from the IO when the buffer
153
- # becomes empty until the IO raises EOFError.
154
- #
155
- # This method could raise same errors with _read_ excepting EOFError.
156
- #
157
- # @yieldparam object [Object] deserialized object
158
- # @return nil
159
- #
160
- def each(&block)
161
- end
162
-
163
- #
164
- # Appends data into the internal buffer and repeats to deserialize objects.
165
- # This method is equivalent to unpacker.feed(data) && unpacker.each { ... }.
166
- #
167
- # @param data [String]
168
- # @yieldparam object [Object] deserialized object
169
- # @return nil
170
- #
171
- def feed_each(data, &block)
172
- end
173
-
174
- #
175
- # Clears the internal buffer and resets deserialization state of the unpacker.
176
- #
177
- # @return nil
178
- #
179
- def reset
180
- end
181
- end
182
-
183
- end
data/doclib/msgpack.rb DELETED
@@ -1,87 +0,0 @@
1
-
2
- module MessagePack
3
- #
4
- # Serializes an object into an IO or String.
5
- #
6
- # @overload dump(obj, options={})
7
- # @param obj [Object] object to be serialized
8
- # @param options [Hash]
9
- # @return [String] serialized data
10
- #
11
- # @overload dump(obj, io, options={})
12
- # @param obj [Object] object to be serialized
13
- # @param io [IO]
14
- # @param options [Hash]
15
- # @return [nil]
16
- #
17
- # See Packer#initialize for supported options.
18
- #
19
- def self.dump(obj)
20
- end
21
-
22
- #
23
- # Serializes an object into an IO or String. Alias of dump.
24
- #
25
- # @overload pack(obj, options={})
26
- # @param obj [Object] object to be serialized
27
- # @param options [Hash]
28
- # @return [String] serialized data
29
- #
30
- # @overload pack(obj, io, options={})
31
- # @param obj [Object] object to be serialized
32
- # @param io [IO]
33
- # @param options [Hash]
34
- # @return [nil]
35
- #
36
- # See Packer#initialize for supported options.
37
- #
38
- def self.pack(obj)
39
- end
40
-
41
- #
42
- # Deserializes an object from an IO or String.
43
- #
44
- # @overload load(string, options={})
45
- # @param string [String] data to deserialize
46
- # @param options [Hash]
47
- #
48
- # @overload load(io, options={})
49
- # @param io [IO]
50
- # @param options [Hash]
51
- #
52
- # @return [Object] deserialized object
53
- #
54
- # See Unpacker#initialize for supported options.
55
- #
56
- def self.load(src, options={})
57
- end
58
-
59
- #
60
- # Deserializes an object from an IO or String. Alias of load.
61
- #
62
- # @overload unpack(string, options={})
63
- # @param string [String] data to deserialize
64
- # @param options [Hash]
65
- #
66
- # @overload unpack(io, options={})
67
- # @param io [IO]
68
- # @param options [Hash]
69
- #
70
- # @return [Object] deserialized object
71
- #
72
- # See Unpacker#initialize for supported options.
73
- #
74
- def self.unpack(src, options={})
75
- end
76
-
77
- #
78
- # An instance of Factory class. DefaultFactory is also used
79
- # by global pack/unpack methods such as MessagePack.dump/load,
80
- # Hash#to_msgpack, and other to_msgpack methods.
81
- #
82
- # Calling DefaultFactory.register_type lets you add an extension
83
- # type globally.
84
- #
85
- DefaultFactory = Factory.new
86
- end
87
-
data/msgpack.org.md DELETED
@@ -1,46 +0,0 @@
1
- # MessagePack for Ruby
2
-
3
- ```
4
- require 'msgpack'
5
- msg = [1,2,3].to_msgpack #=> "\x93\x01\x02\x03"
6
- MessagePack.unpack(msg) #=> [1,2,3]
7
- ```
8
-
9
- ## Install
10
-
11
- ```
12
- gem install msgpack
13
- ```
14
-
15
- ## Use cases
16
-
17
- * Create REST API returing MessagePack using Rails + [RABL](https://github.com/nesquena/rabl)
18
- * Store objects efficiently in memcached or Redis
19
- * Upload data in efficient format from mobile devices. See also MessagePack for [Objective-C](https://github.com/msgpack/msgpack-objectivec) and [Java](https://github.com/msgpack/msgpack-java)
20
-
21
- ## Links
22
-
23
- * [Github](https://github.com/msgpack/msgpack-ruby)
24
- * [API document](http://ruby.msgpack.org/)
25
-
26
- ## Streaming API
27
-
28
- ```
29
- # serialize a 2-element array [e1, e2]
30
- pk = MessagePack::Packer.new(io)
31
- pk.write_array_header(2).write(e1).write(e2).flush
32
- ```
33
-
34
- ```
35
- # deserialize objects from an IO
36
- u = MessagePack::Unpacker.new(io)
37
- u.each { |obj| ... }
38
- ```
39
-
40
- ```
41
- # event-driven deserialization
42
- def on_read(data)
43
- @u ||= MessagePack::Unpacker.new
44
- @u.feed_each(data) { |obj| ... }
45
- end
46
- ```
data/spec/cases.json DELETED
@@ -1 +0,0 @@
1
- [false,true,null,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,127,127,255,65535,4294967295,-32,-32,-128,-32768,-2147483648,0.0,-0.0,1.0,-1.0,"a","a","a","","","",[0],[0],[0],[],[],[],{},{},{},{"a":97},{"a":97},{"a":97},[[]],[["a"]]]
data/spec/cases.msg DELETED
Binary file
Binary file
data/spec/cases_spec.rb DELETED
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
- require 'json'
3
-
4
- describe MessagePack do
5
- here = File.dirname(__FILE__)
6
- CASES = File.read("#{here}/cases.msg")
7
- CASES_JSON = File.read("#{here}/cases.json")
8
- CASES_COMPACT = File.read("#{here}/cases_compact.msg")
9
-
10
- it 'compare with json' do
11
- ms = []
12
- MessagePack::Unpacker.new.feed_each(CASES) {|m|
13
- ms << m
14
- }
15
-
16
- js = JSON.load(CASES_JSON)
17
-
18
- ms.zip(js) {|m,j|
19
- m.should == j
20
- }
21
- end
22
-
23
- it 'compare with compat' do
24
- ms = []
25
- MessagePack::Unpacker.new.feed_each(CASES) {|m|
26
- ms << m
27
- }
28
-
29
- cs = []
30
- MessagePack::Unpacker.new.feed_each(CASES_COMPACT) {|c|
31
- cs << c
32
- }
33
-
34
- ms.zip(cs) {|m,c|
35
- m.should == c
36
- }
37
- end
38
- end
39
-
@@ -1,255 +0,0 @@
1
- require 'spec_helper'
2
- require 'random_compat'
3
-
4
- require 'stringio'
5
- if defined?(Encoding)
6
- Encoding.default_external = 'ASCII-8BIT'
7
- end
8
-
9
- describe Buffer do
10
- r = Random.new
11
- random_seed = r.seed
12
- puts "buffer_io random seed: 0x#{random_seed.to_s(16)}"
13
-
14
- let :source do
15
- ''
16
- end
17
-
18
- def set_source(s)
19
- source.replace(s)
20
- end
21
-
22
- let :io do
23
- StringIO.new(source.dup)
24
- end
25
-
26
- let :buffer do
27
- Buffer.new(io)
28
- end
29
-
30
- it 'io returns internal io' do
31
- buffer.io.should == io
32
- end
33
-
34
- it 'close closes internal io' do
35
- expect(io).to receive(:close)
36
- buffer.close
37
- end
38
-
39
- it 'short feed and read all' do
40
- set_source 'aa'
41
- buffer.read.should == 'aa'
42
- end
43
-
44
- it 'short feed and read short' do
45
- set_source 'aa'
46
- buffer.read(1).should == 'a'
47
- buffer.read(1).should == 'a'
48
- buffer.read(1).should == nil
49
- end
50
-
51
- it 'long feed and read all' do
52
- set_source ' '*(1024*1024)
53
- s = buffer.read
54
- s.size.should == source.size
55
- s.should == source
56
- end
57
-
58
- it 'long feed and read mixed' do
59
- set_source ' '*(1024*1024)
60
- buffer.read(10).should == source.slice!(0, 10)
61
- buffer.read(10).should == source.slice!(0, 10)
62
- buffer.read(10).should == source.slice!(0, 10)
63
- s = buffer.read
64
- s.size.should == source.size
65
- s.should == source
66
- end
67
-
68
- it 'eof' do
69
- set_source ''
70
- buffer.read.should == ''
71
- end
72
-
73
- it 'eof 2' do
74
- set_source 'a'
75
- buffer.read.should == 'a'
76
- buffer.read.should == ''
77
- end
78
-
79
- it 'write short once and flush' do
80
- buffer.write('aa')
81
- buffer.flush
82
- io.string.should == 'aa'
83
- end
84
-
85
- it 'write short twice and flush' do
86
- buffer.write('a')
87
- buffer.write('a')
88
- buffer.flush
89
- io.string.should == 'aa'
90
- end
91
-
92
- it 'write long once and flush' do
93
- s = ' '*(1024*1024)
94
- buffer.write s
95
- buffer.flush
96
- io.string.size.should == s.size
97
- io.string.should == s
98
- end
99
-
100
- it 'write short multi and flush' do
101
- s = ' '*(1024*1024)
102
- 1024.times {
103
- buffer.write ' '*1024
104
- }
105
- buffer.flush
106
- io.string.size.should == s.size
107
- io.string.should == s
108
- end
109
-
110
- it 'random read' do
111
- r = Random.new(random_seed)
112
-
113
- 50.times {
114
- fragments = []
115
-
116
- r.rand(4).times do
117
- n = r.rand(1024*1400)
118
- s = r.bytes(n)
119
- fragments << s
120
- end
121
-
122
- io = StringIO.new(fragments.join)
123
- b = Buffer.new(io)
124
-
125
- fragments.each {|s|
126
- x = b.read(s.size)
127
- x.size.should == s.size
128
- x.should == s
129
- }
130
- b.empty?.should == true
131
- b.read.should == ''
132
- }
133
- end
134
-
135
- it 'random read_all' do
136
- r = Random.new(random_seed)
137
-
138
- 50.times {
139
- fragments = []
140
- r.bytes(0)
141
-
142
- r.rand(4).times do
143
- n = r.rand(1024*1400)
144
- s = r.bytes(n)
145
- fragments << s
146
- end
147
-
148
- io = StringIO.new(fragments.join)
149
- b = Buffer.new(io)
150
-
151
- fragments.each {|s|
152
- x = b.read_all(s.size)
153
- x.size.should == s.size
154
- x.should == s
155
- }
156
- b.empty?.should == true
157
- lambda {
158
- b.read_all(1)
159
- }.should raise_error(EOFError)
160
- }
161
- end
162
-
163
- it 'random skip' do
164
- r = Random.new(random_seed)
165
-
166
- 50.times {
167
- fragments = []
168
-
169
- r.rand(4).times do
170
- n = r.rand(1024*1400)
171
- s = r.bytes(n)
172
- fragments << s
173
- end
174
-
175
- io = StringIO.new(fragments.join)
176
- b = Buffer.new(io)
177
-
178
- fragments.each {|s|
179
- b.skip(s.size).should == s.size
180
- }
181
- b.empty?.should == true
182
- b.skip(1).should == 0
183
- }
184
- end
185
-
186
- it 'random skip_all' do
187
- r = Random.new(random_seed)
188
-
189
- 50.times {
190
- fragments = []
191
-
192
- r.rand(4).times do
193
- n = r.rand(1024*1400)
194
- s = r.bytes(n)
195
- fragments << s
196
- end
197
-
198
- io = StringIO.new(fragments.join)
199
- b = Buffer.new(io)
200
-
201
- fragments.each {|s|
202
- lambda {
203
- b.skip_all(s.size)
204
- }.should_not raise_error
205
- }
206
- b.empty?.should == true
207
- lambda {
208
- b.skip_all(1)
209
- }.should raise_error(EOFError)
210
- }
211
- end
212
-
213
- it 'random write and flush' do
214
- r = Random.new(random_seed)
215
-
216
- 50.times {
217
- s = r.bytes(0)
218
- io = StringIO.new
219
- b = Buffer.new(io)
220
-
221
- r.rand(4).times do
222
- n = r.rand(1024*1400)
223
- x = r.bytes(n)
224
- s << x
225
- b.write(x)
226
- end
227
-
228
- (io.string.size + b.size).should == s.size
229
-
230
- b.flush
231
-
232
- io.string.size.should == s.size
233
- io.string.should == s
234
- }
235
- end
236
-
237
- it 'random write and clear' do
238
- r = Random.new(random_seed)
239
- b = Buffer.new
240
-
241
- 50.times {
242
- s = r.bytes(0)
243
-
244
- r.rand(4).times do
245
- n = r.rand(1024*1400)
246
- x = r.bytes(n)
247
- s << x
248
- b.write(x)
249
- end
250
-
251
- b.size.should == s.size
252
- b.clear
253
- }
254
- end
255
- end
@@ -1,29 +0,0 @@
1
- # encoding: ascii-8bit
2
- require 'spec_helper'
3
-
4
- require 'stringio'
5
- if defined?(Encoding)
6
- Encoding.default_external = 'ASCII-8BIT'
7
- end
8
-
9
- describe Packer do
10
- let :packer do
11
- Packer.new
12
- end
13
-
14
- it 'initialize' do
15
- Packer.new
16
- Packer.new(nil)
17
- Packer.new(StringIO.new)
18
- Packer.new({})
19
- Packer.new(StringIO.new, {})
20
- end
21
-
22
- it 'buffer' do
23
- o1 = packer.buffer.object_id
24
- packer.buffer << 'frsyuki'
25
- packer.buffer.to_s.should == 'frsyuki'
26
- packer.buffer.object_id.should == o1
27
- end
28
- end
29
-