bychar 1.2.1 → 2.0.0

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.
@@ -5,54 +5,53 @@ class TestBychar < Test::Unit::TestCase
5
5
  def test_reads_once
6
6
  s = StringIO.new("This is a string")
7
7
 
8
- reader = Bychar::Reader.new(s)
9
- assert_equal "T", reader.read_one_byte
10
- assert_equal "h", reader.read_one_byte
11
- assert !reader.eof?
8
+ reader = Bychar::ReaderIOBuf.new(s)
9
+ assert_equal "T", reader.read_one_char!
10
+ assert_equal "h", reader.read_one_char!
12
11
  end
13
12
 
14
13
  def test_reads_set_buffer_size
15
14
  s = StringIO.new("abcd")
16
15
  flexmock(s).should_receive(:read).with(4).once.and_return("abcd")
17
- reader = Bychar::Reader.new(s, 4)
18
- reader.read_one_byte
16
+ reader = Bychar::ReaderIOBuf.new(s, 4)
17
+ reader.read_one_char!
19
18
  end
20
19
 
21
20
  def test_reads_in_64kb_chunks_by_default
22
21
  s = StringIO.new("abcd")
23
22
  flexmock(s).should_receive(:read).with(Bychar::DEFAULT_BUFFER_SIZE).once.and_return("abcd")
24
- reader = Bychar::Reader.new(s)
25
- reader.read_one_byte
23
+ reader = Bychar::ReaderIOBuf.new(s)
24
+ reader.read_one_char!
26
25
  end
27
26
 
28
27
  def test_eof_with_empty
29
28
  s = StringIO.new
30
- reader = Bychar::Reader.new(s)
31
- assert s.eof?
29
+ reader = Bychar::ReaderIOBuf.new(s)
30
+ assert_raise(Bychar::EOF) { reader.read_one_char! }
32
31
  end
33
32
 
34
33
  def test_eof_with_io_at_eof
35
34
  s = StringIO.new("foo")
36
35
  s.read(3)
37
- reader = Bychar::Reader.new(s)
38
- assert reader.eof?
36
+ reader = Bychar::ReaderIOBuf.new(s)
37
+ assert_raise(Bychar::EOF) { reader.read_one_char! }
39
38
  end
40
39
 
41
40
  def test_eof_with_string_to_size
42
41
  s = "Foobarboo another"
43
42
  s = StringIO.new(s)
44
- reader = Bychar::Reader.new(s, 1)
45
- s.length.times { reader.read_one_byte }
46
- assert reader.eof?
43
+ reader = Bychar::ReaderIOBuf.new(s, 1)
44
+ s.length.times { reader.read_one_char! }
45
+ assert_raise(Bychar::EOF) { reader.read_one_char! }
47
46
  end
48
47
 
49
48
  def test_read_one_byte_and_raise_at_eof
50
49
  str = "Frobobo"
51
50
 
52
51
  bytes = []
53
- assert_raise(Bychar::EOFError) do
54
- s = Bychar::Reader.new(StringIO.new(str))
55
- loop { bytes << s.read_one_byte! }
52
+ assert_raise(Bychar::EOF) do
53
+ s = Bychar::ReaderIOBuf.new(StringIO.new(str))
54
+ loop { bytes << s.read_one_char! }
56
55
  end
57
56
 
58
57
  assert_equal %w( F r o b o b o ), bytes
@@ -0,0 +1,45 @@
1
+ require 'helper'
2
+ require 'stringio'
3
+
4
+ class TestReader < Test::Unit::TestCase
5
+ def test_reads_once
6
+ s = StringIO.new("This is a string")
7
+
8
+ reader = Bychar.wrap(s)
9
+ assert_equal "T", reader.read_one_char!
10
+ assert_equal "h", reader.read_one_char!
11
+ end
12
+
13
+ def test_eof_with_empty
14
+ s = StringIO.new
15
+ reader = Bychar.wrap(s)
16
+ assert_raise(Bychar::EOF) { reader.read_one_char! }
17
+ end
18
+
19
+ def test_eof_with_io_at_eof
20
+ s = StringIO.new("foo")
21
+ s.read(3)
22
+ reader = Bychar.wrap(s)
23
+ assert_raise(Bychar::EOF) { reader.read_one_char! }
24
+ end
25
+
26
+ def test_eof_with_string_to_size
27
+ s = "Foobarboo another"
28
+ s = StringIO.new(s)
29
+ reader = Bychar.wrap(s)
30
+ s.length.times { reader.read_one_char! }
31
+ assert_raise(Bychar::EOF) { reader.read_one_char! }
32
+ end
33
+
34
+ def test_read_one_byte_and_raise_at_eof
35
+ str = "Frobobo"
36
+ bytes = []
37
+ assert_raise(Bychar::EOF) do
38
+ s = Bychar.wrap(StringIO.new(str))
39
+ loop { bytes << s.read_one_char! }
40
+ end
41
+
42
+ assert_equal %w( F r o b o b o ), bytes
43
+ end
44
+
45
+ end
@@ -0,0 +1,46 @@
1
+ require 'helper'
2
+ require 'stringio'
3
+
4
+ class TestStrReader < Test::Unit::TestCase
5
+ def test_reads_once
6
+ s = StringIO.new("This is a string")
7
+
8
+ reader = Bychar::ReaderIOBuf.new(s)
9
+ assert_equal "T", reader.read_one_char!
10
+ assert_equal "h", reader.read_one_char!
11
+ end
12
+
13
+ def test_eof_with_empty
14
+ s = StringIO.new
15
+ reader = Bychar::ReaderStrbuf.new(s)
16
+ assert_raise(Bychar::EOF) { reader.read_one_char! }
17
+ end
18
+
19
+ def test_eof_with_io_at_eof
20
+ s = StringIO.new("foo")
21
+ s.read(3)
22
+ reader = Bychar::ReaderStrbuf.new(s)
23
+ assert_raise(Bychar::EOF) { reader.read_one_char! }
24
+ end
25
+
26
+ def test_eof_with_string_to_size
27
+ s = "Foobarboo another"
28
+ s = StringIO.new(s)
29
+ reader = Bychar::ReaderStrbuf.new(s)
30
+ s.length.times { reader.read_one_char! }
31
+ assert_raise(Bychar::EOF) { reader.read_one_char! }
32
+ end
33
+
34
+ def test_read_one_byte_and_raise_at_eof
35
+ str = "Frobobo"
36
+
37
+ bytes = []
38
+ assert_raise(Bychar::EOF) do
39
+ s = Bychar::ReaderStrbuf.new(StringIO.new(str))
40
+ loop { bytes << s.read_one_char! }
41
+ end
42
+
43
+ assert_equal %w( F r o b o b o ), bytes
44
+ end
45
+
46
+ end
@@ -0,0 +1,61 @@
1
+ require 'helper'
2
+ require 'stringio'
3
+ require 'tempfile'
4
+
5
+
6
+
7
+ class BenchReader
8
+
9
+ def initialize(reader_class)
10
+ @reader = reader_class
11
+ end
12
+
13
+ def get_reader(io)
14
+ @reader.new(io)
15
+ end
16
+
17
+ def pick
18
+ get_reader(StringIO.new).class.to_s
19
+ end
20
+
21
+ def run
22
+ File.open(File.dirname(__FILE__) + "/huge_nuke_tcl.tcl") do | io |
23
+ reader = get_reader(io)
24
+ begin
25
+ loop { reader.read_one_char! * 2 }
26
+ rescue Bychar::EOF
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ class Auto
33
+ def self.new(io)
34
+ Bychar.wrap(io)
35
+ end
36
+ end
37
+
38
+ class TestBenchmarkReaders < Test::Unit::TestCase
39
+ def test_perf
40
+
41
+ reader0 = BenchReader.new(Bychar::ReaderBare)
42
+ reader1 = BenchReader.new(Bychar::ReaderIOBuf)
43
+ reader2 = BenchReader.new(Bychar::ReaderStrbuf)
44
+ reader3 = BenchReader.new(Auto)
45
+
46
+ platform = "Platform-picked Bychar.wrap(io) #{reader3.pick}:"
47
+
48
+ require 'benchmark'
49
+
50
+ Benchmark.bm(5) do |x|
51
+ x.report("Bare IO using read(1):".ljust(platform.length)) { reader0.run }
52
+ x.report("Bychar using StringIO:".ljust(platform.length)) { reader1.run }
53
+ x.report("Bychar using a String buffer:".ljust(platform.length)) { reader2.run }
54
+ x.report(platform) { reader3.run }
55
+
56
+ end
57
+
58
+ assert true
59
+ end
60
+ end
61
+
metadata CHANGED
@@ -1,80 +1,82 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bychar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
5
- prerelease:
4
+ version: 2.0.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Julik Tarkhanov
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-15 00:00:00.000000000 Z
12
+ date: 2013-03-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdoc
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
16
+ version_requirements: !ruby/object:Gem::Requirement
18
17
  requirements:
19
18
  - - ~>
20
19
  - !ruby/object:Gem::Version
21
20
  version: '3.12'
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
21
  none: false
22
+ requirement: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3.12'
27
+ none: false
28
+ prerelease: false
29
+ type: :development
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: bundler
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
32
+ version_requirements: !ruby/object:Gem::Requirement
34
33
  requirements:
35
34
  - - ! '>='
36
35
  - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
36
+ version: !binary |-
37
+ MA==
41
38
  none: false
39
+ requirement: !ruby/object:Gem::Requirement
42
40
  requirements:
43
41
  - - ! '>='
44
42
  - !ruby/object:Gem::Version
45
- version: '0'
43
+ version: !binary |-
44
+ MA==
45
+ none: false
46
+ prerelease: false
47
+ type: :development
46
48
  - !ruby/object:Gem::Dependency
47
49
  name: jeweler
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
+ version_requirements: !ruby/object:Gem::Requirement
50
51
  requirements:
51
52
  - - ~>
52
53
  - !ruby/object:Gem::Version
53
54
  version: 1.8.4
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
55
  none: false
56
+ requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - ~>
60
59
  - !ruby/object:Gem::Version
61
60
  version: 1.8.4
61
+ none: false
62
+ prerelease: false
63
+ type: :development
62
64
  - !ruby/object:Gem::Dependency
63
65
  name: flexmock
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
+ version_requirements: !ruby/object:Gem::Requirement
66
67
  requirements:
67
68
  - - ~>
68
69
  - !ruby/object:Gem::Version
69
70
  version: '0.8'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
71
  none: false
72
+ requirement: !ruby/object:Gem::Requirement
74
73
  requirements:
75
74
  - - ~>
76
75
  - !ruby/object:Gem::Version
77
76
  version: '0.8'
77
+ none: false
78
+ prerelease: false
79
+ type: :development
78
80
  description: ! ' Helps parsing IO char by char '
79
81
  email: me@julik.nl
80
82
  executables: []
@@ -91,34 +93,43 @@ files:
91
93
  - Rakefile
92
94
  - bychar.gemspec
93
95
  - lib/bychar.rb
96
+ - lib/impls/reader_bare.rb
97
+ - lib/impls/reader_iobuf.rb
98
+ - lib/impls/reader_strbuf.rb
94
99
  - test/helper.rb
95
- - test/test_bychar.rb
100
+ - test/huge_nuke_tcl.tcl
101
+ - test/test_ioreader.rb
102
+ - test/test_reader.rb
103
+ - test/test_strreader.rb
104
+ - test/test_z_bench.rb
96
105
  homepage: http://github.com/julik/bychar
97
106
  licenses:
98
107
  - MIT
99
- post_install_message:
108
+ post_install_message:
100
109
  rdoc_options: []
101
110
  require_paths:
102
111
  - lib
103
112
  required_ruby_version: !ruby/object:Gem::Requirement
104
- none: false
105
113
  requirements:
106
114
  - - ! '>='
107
115
  - !ruby/object:Gem::Version
108
- version: '0'
109
116
  segments:
110
117
  - 0
111
- hash: -2517849728634494655
112
- required_rubygems_version: !ruby/object:Gem::Requirement
118
+ hash: 2
119
+ version: !binary |-
120
+ MA==
113
121
  none: false
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
123
  requirements:
115
124
  - - ! '>='
116
125
  - !ruby/object:Gem::Version
117
- version: '0'
126
+ version: !binary |-
127
+ MA==
128
+ none: false
118
129
  requirements: []
119
- rubyforge_project:
130
+ rubyforge_project:
120
131
  rubygems_version: 1.8.24
121
- signing_key:
132
+ signing_key:
122
133
  specification_version: 3
123
134
  summary: Helps parsing IO char by char
124
135
  test_files: []