Skip to content

Commit f14210d

Browse files
committed
added more random test cases
1 parent d31e3ec commit f14210d

2 files changed

Lines changed: 148 additions & 29 deletions

File tree

spec/buffer_spec.rb

Lines changed: 147 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,58 @@
22
require 'random_compat'
33

44
describe Buffer do
5-
EXAMPLES = {}
6-
EXAMPLES[:empty01] = ''
7-
EXAMPLES[:empty02] = ''
8-
EXAMPLES[:copy01] = 'short'
9-
EXAMPLES[:copy02] = 'short'*2
10-
EXAMPLES[:ref01] = 'short'*128
11-
EXAMPLES[:ref02] = 'short'*128*2
12-
EXAMPLES[:ref03] = 'a'*((1024*1024+2)*2)
13-
EXAMPLES[:refcopy01] = 'short'*128
14-
EXAMPLES[:expand01] = 'short'*1024
15-
EXAMPLES[:expand02] = 'short'*(127+1024)
16-
EXAMPLES[:offset01] = 'ort'+'short'
17-
EXAMPLES[:offset02] = 'ort'+'short'*127
18-
EXAMPLES[:offset03] = 'ort'+'short'*(126+1024)
5+
STATIC_EXAMPLES = {}
6+
STATIC_EXAMPLES[:empty01] = ''
7+
STATIC_EXAMPLES[:empty02] = ''
8+
STATIC_EXAMPLES[:copy01] = 'short'
9+
STATIC_EXAMPLES[:copy02] = 'short'*2
10+
STATIC_EXAMPLES[:ref01] = 'short'*128
11+
STATIC_EXAMPLES[:ref02] = 'short'*128*2
12+
STATIC_EXAMPLES[:ref03] = 'a'*((1024*1024+2)*2)
13+
STATIC_EXAMPLES[:refcopy01] = 'short'*128
14+
STATIC_EXAMPLES[:expand01] = 'short'*1024
15+
STATIC_EXAMPLES[:expand02] = 'short'*(127+1024)
16+
STATIC_EXAMPLES[:offset01] = 'ort'+'short'
17+
STATIC_EXAMPLES[:offset02] = 'ort'+'short'*127
18+
STATIC_EXAMPLES[:offset03] = 'ort'+'short'*(126+1024)
1919

2020
if ''.respond_to?(:force_encoding)
21-
EXAMPLES.each_value {|v| v.force_encoding('ASCII-8BIT') }
21+
STATIC_EXAMPLES.each_value {|v| v.force_encoding('ASCII-8BIT') }
2222
end
23-
EXAMPLES.each_value {|v| v.freeze }
23+
STATIC_EXAMPLES.each_value {|v| v.freeze }
2424

25-
let :examples do
26-
EXAMPLES
25+
r = Random.new #0xb6f43619478d4eab70bb2a31bf9c7f88
26+
RANDOM_SEED = r.seed
27+
puts "random seed: 0x#{RANDOM_SEED.to_s(16)}"
28+
29+
let :random_cases_examples do
30+
r = Random.new(RANDOM_SEED)
31+
cases = {}
32+
examples = {}
33+
34+
10.times do |i|
35+
b = Buffer.new
36+
s = r.bytes(0)
37+
r.rand(3).times do
38+
n = r.rand(1024*1400)
39+
x = r.bytes(n)
40+
s << x
41+
b << x
42+
end
43+
r.rand(2).times do
44+
n = r.rand(1024*1400)
45+
b.read(n)
46+
s.slice!(0, n)
47+
end
48+
key = :"random#{"%02d"%i}"
49+
cases[key] = b
50+
examples[key] = s
51+
end
52+
53+
[cases, examples]
2754
end
2855

29-
let :cases do
56+
let :static_cases do
3057
map = {}
3158
map[:empty01] = empty01
3259
map[:empty02] = empty02
@@ -44,6 +71,26 @@
4471
map
4572
end
4673

74+
let :static_examples do
75+
STATIC_EXAMPLES
76+
end
77+
78+
let :random_cases do
79+
random_cases_examples[0]
80+
end
81+
82+
let :random_examples do
83+
random_cases_examples[1]
84+
end
85+
86+
let :cases do
87+
static_cases.merge(random_cases)
88+
end
89+
90+
let :examples do
91+
static_examples.merge(random_examples)
92+
end
93+
4794
let :case_keys do
4895
examples.keys
4996
end
@@ -398,23 +445,31 @@
398445
}
399446
end
400447

448+
it 'write_to' do
449+
case_keys.each {|k|
450+
sio = StringIO.new
451+
cases[k].write_to(sio).should == examples[k].size
452+
cases[k].size.should == 0
453+
sio.string.should == examples[k]
454+
}
455+
end
456+
401457
it 'random read/write' do
402-
r = Random.new#(0x7ae1a8b4042fd9d589281dbb081caf37)
458+
r = Random.new(RANDOM_SEED)
403459
s = r.bytes(0)
404460
b = Buffer.new
405461

406-
puts "random read/write seed: 0x#{r.seed.to_s(16)}"
407-
100.times {
462+
10.times {
408463
# write
409-
r.rand(3).times do
464+
r.rand(4).times do
410465
n = r.rand(1024*1400)
411466
x = r.bytes(n)
412467
s << x
413468
b << x
414469
end
415470

416471
# read
417-
r.rand(2).times do
472+
r.rand(3).times do
418473
n = r.rand(1024*1400)
419474
ex = s.slice!(0, n)
420475
ex = nil if ex.empty?
@@ -426,29 +481,92 @@
426481
}
427482
end
428483

429-
it 'random skip write' do
430-
r = Random.new
484+
it 'random read_all/write' do
485+
r = Random.new(RANDOM_SEED)
431486
s = r.bytes(0)
432487
b = Buffer.new
433488

434-
puts "random skip/write seed: 0x#{r.seed.to_s(16)}"
435-
100.times {
489+
10.times {
436490
# write
491+
r.rand(4).times do
492+
n = r.rand(1024*1400)
493+
x = r.bytes(n)
494+
s << x
495+
b << x
496+
end
497+
498+
# read_all
437499
r.rand(3).times do
500+
n = r.rand(1024*1400)
501+
begin
502+
x = b.read_all(n)
503+
ex = s.slice!(0, n)
504+
x.size == n
505+
x.should == ex
506+
b.size.should == s.size
507+
rescue EOFError
508+
b.size.should == s.size
509+
b.read.should == s
510+
s.clear
511+
break
512+
end
513+
end
514+
}
515+
end
516+
517+
it 'random skip write' do
518+
r = Random.new(RANDOM_SEED)
519+
s = r.bytes(0)
520+
b = Buffer.new
521+
522+
10.times {
523+
# write
524+
r.rand(4).times do
438525
n = r.rand(1024*1400)
439526
x = r.bytes(n)
440527
s << x
441528
b << x
442529
end
443530

444531
# skip
445-
r.rand(2).times do
532+
r.rand(3).times do
446533
n = r.rand(1024*1400)
447534
ex = s.slice!(0, n)
448535
b.skip(n).should == ex.size
449536
b.size.should == s.size
450537
end
451538
}
452539
end
540+
541+
it 'random skip_all write' do
542+
r = Random.new(RANDOM_SEED)
543+
s = r.bytes(0)
544+
b = Buffer.new
545+
546+
10.times {
547+
# write
548+
r.rand(4).times do
549+
n = r.rand(1024*1400)
550+
x = r.bytes(n)
551+
s << x
552+
b << x
553+
end
554+
555+
# skip_all
556+
r.rand(3).times do
557+
n = r.rand(1024*1400)
558+
begin
559+
b.skip_all(n)
560+
ex = s.slice!(0, n)
561+
b.size.should == s.size
562+
ensure EOFError
563+
b.size.should == s.size
564+
b.read.should == s
565+
s.clear
566+
break
567+
end
568+
end
569+
}
570+
end
453571
end
454572

spec/spec_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
GC.stress = true
1414
end
1515

16+
require 'stringio'
1617
require 'msgpack'
1718

1819
Packer = MessagePack::Packer

0 commit comments

Comments
 (0)