adsp 1.0.2 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/{test → lib/adsp/test}/common.rb +4 -1
  3. data/{test → lib/adsp/test}/coverage_helper.rb +0 -0
  4. data/lib/adsp/test/file.rb +120 -0
  5. data/{test → lib/adsp/test}/minitest.rb +1 -0
  6. data/{test → lib/adsp/test}/mock/common.rb +1 -0
  7. data/{test → lib/adsp/test}/mock/file.rb +1 -0
  8. data/{test → lib/adsp/test}/mock/stream/raw/compressor.rb +1 -0
  9. data/{test → lib/adsp/test}/mock/stream/raw/decompressor.rb +1 -0
  10. data/{test → lib/adsp/test}/mock/stream/raw/native_compressor.rb +1 -0
  11. data/{test → lib/adsp/test}/mock/stream/raw/native_decompressor.rb +1 -0
  12. data/{test → lib/adsp/test}/mock/stream/reader.rb +1 -0
  13. data/{test → lib/adsp/test}/mock/stream/writer.rb +1 -0
  14. data/{test → lib/adsp/test}/mock/string.rb +1 -0
  15. data/{test → lib/adsp/test}/option.rb +1 -0
  16. data/{test → lib/adsp/test}/stream/abstract.rb +1 -0
  17. data/lib/adsp/test/stream/minitar.rb +50 -0
  18. data/{test → lib/adsp/test}/stream/raw/abstract.rb +1 -0
  19. data/lib/adsp/test/stream/raw/compressor.rb +165 -0
  20. data/lib/adsp/test/stream/raw/decompressor.rb +165 -0
  21. data/lib/adsp/test/stream/reader.rb +642 -0
  22. data/lib/adsp/test/stream/reader_helpers.rb +421 -0
  23. data/lib/adsp/test/stream/writer.rb +609 -0
  24. data/lib/adsp/test/stream/writer_helpers.rb +267 -0
  25. data/lib/adsp/test/string.rb +95 -0
  26. data/{test → lib/adsp/test}/validation.rb +7 -0
  27. data/lib/adsp/test/version.rb +18 -0
  28. data/lib/adsp/version.rb +1 -1
  29. data/test/file.test.rb +3 -116
  30. data/test/stream/minitar.test.rb +3 -46
  31. data/test/stream/raw/compressor.test.rb +3 -162
  32. data/test/stream/raw/decompressor.test.rb +3 -162
  33. data/test/stream/reader.test.rb +3 -639
  34. data/test/stream/reader_helpers.test.rb +3 -417
  35. data/test/stream/writer.test.rb +3 -606
  36. data/test/stream/writer_helpers.test.rb +3 -263
  37. data/test/string.test.rb +3 -91
  38. data/test/version.test.rb +3 -14
  39. metadata +28 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c094ea37f026fccb543a8fd2a07b5ca7ffa7a257898f4d68355c3b5725d5f4a
4
- data.tar.gz: 1a23e412fa5acf7a1db82eaf54efa6d5f624371a7a073fb07efa76eff1dd39f0
3
+ metadata.gz: 30860551943717e9021665e6b9a7579a2a2b51998515dd66bddfbe4a61803dda
4
+ data.tar.gz: eab7e3ece3ff8153ac5a6e47abdd9cccba8622beb6a04d387c3d214bac35611e
5
5
  SHA512:
6
- metadata.gz: e6dc7f6d468f9bf7efd0bdb3dec79a6edc8f546e450bf6fed510f6ff2200e088518d17a6a3ed3e7feaceada5020d529e62b59ccb574426630b85ad0b265c70d3
7
- data.tar.gz: a163ea2c53fba855eb65f60432fed2b5e712541acbe23defd1db270b3de348eb732ea541186eeed51a1752821f566c734275f9cf7538cd1bf327bc475c285647
6
+ metadata.gz: ef45beb65c047e2c55cdcd68700aa0cfa456fa0b77653fda659c0c6d093d9e5b82e7ef7bcdff13d9d7c084da4e7490f29c5c2f8dcfcb83c1acc65013ec4d33ec
7
+ data.tar.gz: 685e128e4d17c3d875135bca4ab169004d2f15d03b3a50bef45998b213517a040dff8892b19143672f1eefcd6ddf0642792728d5db8904e748fcb05cc3780724
@@ -9,9 +9,12 @@ require_relative "coverage_helper"
9
9
 
10
10
  module ADSP
11
11
  module Test
12
+ # ADSP::Test::Common module.
12
13
  module Common
13
- BASE_PATH = ::File.expand_path(::File.join(::File.dirname(__FILE__), "..")).freeze
14
+ BASE_PATH = ::File.expand_path(::File.join(::File.dirname(__FILE__), "..", "..", "..")).freeze
15
+
14
16
  TEMP_PATH = ::File.join(BASE_PATH, "tmp").freeze
17
+ FileUtils.mkdir_p TEMP_PATH
15
18
 
16
19
  SOURCE_PATH = ::File.join(TEMP_PATH, "source").freeze
17
20
  ARCHIVE_PATH = ::File.join(TEMP_PATH, "archive").freeze
File without changes
@@ -0,0 +1,120 @@
1
+ # Abstract data stream processor.
2
+ # Copyright (c) 2021 AUTHORS, MIT License.
3
+
4
+ require "adsp/file"
5
+
6
+ require_relative "common"
7
+ require_relative "minitest"
8
+ require_relative "mock/file"
9
+ require_relative "option"
10
+ require_relative "validation"
11
+
12
+ module ADSP
13
+ # ADSP::Test module.
14
+ module Test
15
+ # ADSP::Test::File class.
16
+ class File < Minitest::Test
17
+ Option = Test::Option
18
+ Target = Mock::File
19
+
20
+ SOURCE_PATH = Common::SOURCE_PATH
21
+ ARCHIVE_PATH = Common::ARCHIVE_PATH
22
+ TEXTS = Common::TEXTS
23
+ LARGE_TEXTS = Common::LARGE_TEXTS
24
+
25
+ BUFFER_LENGTH_NAMES = %i[source_buffer_length destination_buffer_length].freeze
26
+ BUFFER_LENGTH_MAPPING = {
27
+ :source_buffer_length => :destination_buffer_length,
28
+ :destination_buffer_length => :source_buffer_length
29
+ }
30
+ .freeze
31
+
32
+ def test_invalid_arguments
33
+ Validation::INVALID_STRINGS.each do |invalid_path|
34
+ assert_raises ValidateError do
35
+ Target.compress invalid_path, ARCHIVE_PATH
36
+ end
37
+
38
+ assert_raises ValidateError do
39
+ Target.compress SOURCE_PATH, invalid_path
40
+ end
41
+
42
+ assert_raises ValidateError do
43
+ Target.decompress invalid_path, SOURCE_PATH
44
+ end
45
+
46
+ assert_raises ValidateError do
47
+ Target.decompress ARCHIVE_PATH, invalid_path
48
+ end
49
+ end
50
+
51
+ get_invalid_compressor_options do |invalid_options|
52
+ assert_raises ValidateError do
53
+ Target.compress SOURCE_PATH, ARCHIVE_PATH, invalid_options
54
+ end
55
+ end
56
+
57
+ get_invalid_decompressor_options do |invalid_options|
58
+ assert_raises ValidateError do
59
+ Target.decompress ARCHIVE_PATH, SOURCE_PATH, invalid_options
60
+ end
61
+ end
62
+ end
63
+
64
+ def test_texts
65
+ parallel_compressor_options do |compressor_options, worker_index|
66
+ source_path = Common.get_path SOURCE_PATH, worker_index
67
+ archive_path = Common.get_path ARCHIVE_PATH, worker_index
68
+
69
+ TEXTS.each do |text|
70
+ ::File.write source_path, text, :mode => "wb"
71
+ Target.compress source_path, archive_path, compressor_options
72
+
73
+ get_compatible_decompressor_options compressor_options do |decompressor_options|
74
+ Target.decompress archive_path, source_path, decompressor_options
75
+
76
+ decompressed_text = ::File.read source_path, :mode => "rb"
77
+ decompressed_text.force_encoding text.encoding
78
+
79
+ assert_equal text, decompressed_text
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ def test_large_texts
86
+ Common.parallel LARGE_TEXTS do |text, worker_index|
87
+ source_path = Common.get_path SOURCE_PATH, worker_index
88
+ archive_path = Common.get_path ARCHIVE_PATH, worker_index
89
+
90
+ ::File.write source_path, text, :mode => "wb"
91
+ Target.compress source_path, archive_path
92
+ Target.decompress archive_path, source_path
93
+
94
+ decompressed_text = ::File.read source_path, :mode => "rb"
95
+ decompressed_text.force_encoding text.encoding
96
+
97
+ assert_equal text, decompressed_text
98
+ end
99
+ end
100
+
101
+ # -----
102
+
103
+ def get_invalid_compressor_options(&block)
104
+ self.class::Option.get_invalid_compressor_options BUFFER_LENGTH_NAMES, &block
105
+ end
106
+
107
+ def get_invalid_decompressor_options(&block)
108
+ self.class::Option.get_invalid_decompressor_options BUFFER_LENGTH_NAMES, &block
109
+ end
110
+
111
+ def parallel_compressor_options(&block)
112
+ Common.parallel_options self.class::Option.get_compressor_options_generator(BUFFER_LENGTH_NAMES), &block
113
+ end
114
+
115
+ def get_compatible_decompressor_options(compressor_options, &block)
116
+ self.class::Option.get_compatible_decompressor_options compressor_options, BUFFER_LENGTH_MAPPING, &block
117
+ end
118
+ end
119
+ end
120
+ end
@@ -4,6 +4,7 @@
4
4
  require "minitest"
5
5
  require "minitest/autorun"
6
6
 
7
+ # Minitest module.
7
8
  module Minitest
8
9
  Minitest.module_eval do
9
10
  class << self
@@ -8,6 +8,7 @@ require_relative "../common"
8
8
  module ADSP
9
9
  module Test
10
10
  module Mock
11
+ # ADSP::Test::Mock::Common module.
11
12
  module Common
12
13
  DEFAULT_DESTINATION_BUFFER_LENGTH = 1 << 18 # 256 KB
13
14
 
@@ -8,6 +8,7 @@ require_relative "./common"
8
8
  module ADSP
9
9
  module Test
10
10
  module Mock
11
+ # ADSP::Test::Mock::File class.
11
12
  class File < ADSP::File
12
13
  PORTION_LENGTH = 10**6
13
14
 
@@ -10,6 +10,7 @@ module ADSP
10
10
  module Mock
11
11
  module Stream
12
12
  module Raw
13
+ # ADSP::Test::Mock::Stream::Raw::Compressor class.
13
14
  class Compressor < ADSP::Stream::Raw::Compressor
14
15
  NativeCompressor = Raw::NativeCompressor
15
16
  end
@@ -10,6 +10,7 @@ module ADSP
10
10
  module Mock
11
11
  module Stream
12
12
  module Raw
13
+ # ADSP::Test::Mock::Stream::Raw::Decompressor class.
13
14
  class Decompressor < ADSP::Stream::Raw::Decompressor
14
15
  NativeDecompressor = Raw::NativeDecompressor
15
16
  end
@@ -11,6 +11,7 @@ module ADSP
11
11
  module Mock
12
12
  module Stream
13
13
  module Raw
14
+ # ADSP::Test::Mock::Stream::Raw::NativeCompressor class.
14
15
  class NativeCompressor
15
16
  def initialize(options)
16
17
  ADSP::Validation.validate_hash options
@@ -11,6 +11,7 @@ module ADSP
11
11
  module Mock
12
12
  module Stream
13
13
  module Raw
14
+ # ADSP::Test::Mock::Stream::Raw::NativeDecompressor class.
14
15
  class NativeDecompressor
15
16
  def initialize(options)
16
17
  ADSP::Validation.validate_hash options
@@ -9,6 +9,7 @@ module ADSP
9
9
  module Test
10
10
  module Mock
11
11
  module Stream
12
+ # ADSP::Test::Mock::Stream::Reader class.
12
13
  class Reader < ADSP::Stream::Reader
13
14
  RawDecompressor = Mock::Stream::Raw::Decompressor
14
15
  end
@@ -9,6 +9,7 @@ module ADSP
9
9
  module Test
10
10
  module Mock
11
11
  module Stream
12
+ # ADSP::Test::Mock::Stream::Writer class.
12
13
  class Writer < ADSP::Stream::Writer
13
14
  RawCompressor = Mock::Stream::Raw::Compressor
14
15
  end
@@ -8,6 +8,7 @@ require_relative "./common"
8
8
  module ADSP
9
9
  module Test
10
10
  module Mock
11
+ # ADSP::Test::Mock::String class.
11
12
  class String < ADSP::String
12
13
  def self.native_compress_string(source, options)
13
14
  destination_buffer_length = options[:destination_buffer_length]
@@ -8,6 +8,7 @@ require_relative "validation"
8
8
 
9
9
  module ADSP
10
10
  module Test
11
+ # ADSP::Test::Option module.
11
12
  module Option
12
13
  private_class_method def self.get_common_invalid_options(buffer_length_names, &block)
13
14
  Validation::INVALID_HASHES.each(&block)
@@ -11,6 +11,7 @@ require_relative "../validation"
11
11
  module ADSP
12
12
  module Test
13
13
  module Stream
14
+ # ADSP::Test::Stream::Abstract class.
14
15
  class Abstract < Minitest::Test
15
16
  SOURCE_PATH = Common::SOURCE_PATH
16
17
 
@@ -0,0 +1,50 @@
1
+ # Abstract data stream processor.
2
+ # Copyright (c) 2021 AUTHORS, MIT License.
3
+
4
+ require "minitar"
5
+
6
+ require_relative "../common"
7
+ require_relative "../minitest"
8
+ require_relative "../mock/stream/reader"
9
+ require_relative "../mock/stream/writer"
10
+
11
+ module ADSP
12
+ module Test
13
+ # ADSP::Test::Stream module.
14
+ module Stream
15
+ # ADSP::Test::Stream::MinitarTest class.
16
+ class MinitarTest < Minitest::Test
17
+ Reader = Mock::Stream::Reader
18
+ Writer = Mock::Stream::Writer
19
+
20
+ ARCHIVE_PATH = Common::ARCHIVE_PATH
21
+ LARGE_TEXTS = Common::LARGE_TEXTS
22
+
23
+ def test_tar
24
+ Common.parallel LARGE_TEXTS do |text, worker_index|
25
+ archive_path = Common.get_path ARCHIVE_PATH, worker_index
26
+
27
+ Writer.open archive_path do |writer|
28
+ Minitar::Writer.open writer do |tar|
29
+ tar.add_file_simple "file", :data => text
30
+ end
31
+ end
32
+
33
+ Reader.open archive_path do |reader|
34
+ Minitar::Reader.open reader do |tar|
35
+ tar.each_entry do |entry|
36
+ assert_equal "file", entry.name
37
+
38
+ decompressed_text = entry.read
39
+ decompressed_text.force_encoding text.encoding
40
+
41
+ assert_equal text, decompressed_text
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -8,6 +8,7 @@ module ADSP
8
8
  module Test
9
9
  module Stream
10
10
  module Raw
11
+ # ADSP::Test::Stream::Raw::Abstract class.
11
12
  class Abstract < Minitest::Test
12
13
  NOOP_PROC = Validation::NOOP_PROC
13
14
 
@@ -0,0 +1,165 @@
1
+ # Abstract data stream processor.
2
+ # Copyright (c) 2021 AUTHORS, MIT License.
3
+
4
+ require_relative "abstract"
5
+ require_relative "../../common"
6
+ require_relative "../../mock/stream/raw/compressor"
7
+ require_relative "../../mock/string"
8
+ require_relative "../../option"
9
+ require_relative "../../validation"
10
+
11
+ module ADSP
12
+ module Test
13
+ module Stream
14
+ # ADSP::Test::Stream::Raw module.
15
+ module Raw
16
+ # ADSP::Test::Stream::Raw::Compressor class.
17
+ class Compressor < Abstract
18
+ Target = Mock::Stream::Raw::Compressor
19
+ String = Mock::String
20
+
21
+ TEXTS = Common::TEXTS
22
+ LARGE_TEXTS = Common::LARGE_TEXTS
23
+ PORTION_LENGTHS = Common::PORTION_LENGTHS
24
+ LARGE_PORTION_LENGTHS = Common::LARGE_PORTION_LENGTHS
25
+
26
+ BUFFER_LENGTH_NAMES = %i[destination_buffer_length].freeze
27
+ BUFFER_LENGTH_MAPPING = { :destination_buffer_length => :destination_buffer_length }.freeze
28
+
29
+ def test_invalid_initialize
30
+ get_invalid_compressor_options do |invalid_options|
31
+ assert_raises ValidateError do
32
+ Target.new invalid_options
33
+ end
34
+ end
35
+ end
36
+
37
+ def test_invalid_write
38
+ compressor = Target.new
39
+
40
+ Validation::INVALID_STRINGS.each do |invalid_string|
41
+ assert_raises ValidateError do
42
+ compressor.write invalid_string, &NOOP_PROC
43
+ end
44
+ end
45
+
46
+ assert_raises ValidateError do
47
+ compressor.write ""
48
+ end
49
+
50
+ compressor.close(&NOOP_PROC)
51
+
52
+ assert_raises UsedAfterCloseError do
53
+ compressor.write "", &NOOP_PROC
54
+ end
55
+ end
56
+
57
+ def test_texts
58
+ parallel_compressor_options do |compressor_options|
59
+ TEXTS.each do |text|
60
+ PORTION_LENGTHS.each do |portion_length|
61
+ compressed_buffer = ::StringIO.new
62
+ compressed_buffer.set_encoding ::Encoding::BINARY
63
+
64
+ writer = proc { |portion| compressed_buffer << portion }
65
+ compressor = Target.new compressor_options
66
+
67
+ begin
68
+ source = "".b
69
+ text_offset = 0
70
+ index = 0
71
+
72
+ loop do
73
+ portion = text.byteslice text_offset, portion_length
74
+ break if portion.nil?
75
+
76
+ text_offset += portion_length
77
+ source << portion
78
+
79
+ bytes_written = compressor.write source, &writer
80
+ source = source.byteslice bytes_written, source.bytesize - bytes_written
81
+
82
+ compressor.flush(&writer) if index.even?
83
+ index += 1
84
+ end
85
+
86
+ ensure
87
+ refute_predicate compressor, :closed?
88
+ compressor.close(&writer)
89
+ assert_predicate compressor, :closed?
90
+ end
91
+
92
+ compressed_text = compressed_buffer.string
93
+
94
+ get_compatible_decompressor_options compressor_options do |decompressor_options|
95
+ decompressed_text = String.decompress compressed_text, decompressor_options
96
+ decompressed_text.force_encoding text.encoding
97
+
98
+ assert_equal text, decompressed_text
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ def test_large_texts
106
+ options_generator = OCG.new(
107
+ :text => LARGE_TEXTS,
108
+ :portion_length => LARGE_PORTION_LENGTHS
109
+ )
110
+
111
+ Common.parallel_options options_generator do |options|
112
+ text = options[:text]
113
+ portion_length = options[:portion_length]
114
+
115
+ compressed_buffer = ::StringIO.new
116
+ compressed_buffer.set_encoding ::Encoding::BINARY
117
+
118
+ writer = proc { |portion| compressed_buffer << portion }
119
+ compressor = Target.new
120
+
121
+ begin
122
+ source = "".b
123
+ text_offset = 0
124
+
125
+ loop do
126
+ portion = text.byteslice text_offset, portion_length
127
+ break if portion.nil?
128
+
129
+ text_offset += portion_length
130
+ source << portion
131
+
132
+ bytes_written = compressor.write source, &writer
133
+ source = source.byteslice bytes_written, source.bytesize - bytes_written
134
+ end
135
+ ensure
136
+ compressor.close(&writer)
137
+ end
138
+
139
+ compressed_text = compressed_buffer.string
140
+
141
+ decompressed_text = String.decompress compressed_text
142
+ decompressed_text.force_encoding text.encoding
143
+
144
+ assert_equal text, decompressed_text
145
+ end
146
+ end
147
+
148
+ # -----
149
+
150
+ def get_invalid_compressor_options(&block)
151
+ Option.get_invalid_compressor_options BUFFER_LENGTH_NAMES, &block
152
+ end
153
+
154
+ def parallel_compressor_options(&block)
155
+ Common.parallel_options Option.get_compressor_options_generator(BUFFER_LENGTH_NAMES), &block
156
+ end
157
+
158
+ def get_compatible_decompressor_options(compressor_options, &block)
159
+ Option.get_compatible_decompressor_options compressor_options, BUFFER_LENGTH_MAPPING, &block
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,165 @@
1
+ # Abstract data stream processor.
2
+ # Copyright (c) 2021 AUTHORS, MIT License.
3
+
4
+ require_relative "abstract"
5
+ require_relative "../../common"
6
+ require_relative "../../mock/stream/raw/decompressor"
7
+ require_relative "../../mock/string"
8
+ require_relative "../../option"
9
+ require_relative "../../validation"
10
+
11
+ module ADSP
12
+ module Test
13
+ module Stream
14
+ # ADSP::Test::Stream::Raw module.
15
+ module Raw
16
+ # ADSP::Test::Stream::Raw::Decompressor class.
17
+ class Decompressor < Abstract
18
+ Target = Mock::Stream::Raw::Decompressor
19
+ String = Mock::String
20
+
21
+ TEXTS = Common::TEXTS
22
+ LARGE_TEXTS = Common::LARGE_TEXTS
23
+ PORTION_LENGTHS = Common::PORTION_LENGTHS
24
+ LARGE_PORTION_LENGTHS = Common::LARGE_PORTION_LENGTHS
25
+
26
+ BUFFER_LENGTH_NAMES = %i[destination_buffer_length].freeze
27
+ BUFFER_LENGTH_MAPPING = { :destination_buffer_length => :destination_buffer_length }.freeze
28
+
29
+ def test_invalid_initialize
30
+ get_invalid_decompressor_options do |invalid_options|
31
+ assert_raises ValidateError do
32
+ Target.new invalid_options
33
+ end
34
+ end
35
+ end
36
+
37
+ def test_invalid_read
38
+ decompressor = Target.new
39
+
40
+ Validation::INVALID_STRINGS.each do |invalid_string|
41
+ assert_raises ValidateError do
42
+ decompressor.read invalid_string, &NOOP_PROC
43
+ end
44
+ end
45
+
46
+ assert_raises ValidateError do
47
+ decompressor.read ""
48
+ end
49
+
50
+ decompressor.close(&NOOP_PROC)
51
+
52
+ assert_raises UsedAfterCloseError do
53
+ decompressor.read "", &NOOP_PROC
54
+ end
55
+ end
56
+
57
+ def test_texts
58
+ parallel_compressor_options do |compressor_options|
59
+ TEXTS.each do |text|
60
+ compressed_text = String.compress text, compressor_options
61
+
62
+ PORTION_LENGTHS.each do |portion_length|
63
+ get_compatible_decompressor_options compressor_options do |decompressor_options|
64
+ decompressed_buffer = ::StringIO.new
65
+ decompressed_buffer.set_encoding ::Encoding::BINARY
66
+
67
+ writer = proc { |portion| decompressed_buffer << portion }
68
+ decompressor = Target.new decompressor_options
69
+
70
+ begin
71
+ source = "".b
72
+ compressed_text_offset = 0
73
+ index = 0
74
+
75
+ loop do
76
+ portion = compressed_text.byteslice compressed_text_offset, portion_length
77
+ break if portion.nil?
78
+
79
+ compressed_text_offset += portion_length
80
+ source << portion
81
+
82
+ bytes_read = decompressor.read source, &writer
83
+ source = source.byteslice bytes_read, source.bytesize - bytes_read
84
+
85
+ decompressor.flush(&writer) if index.even?
86
+ index += 1
87
+ end
88
+
89
+ ensure
90
+ refute_predicate decompressor, :closed?
91
+ decompressor.close(&writer)
92
+ assert_predicate decompressor, :closed?
93
+ end
94
+
95
+ decompressed_text = decompressed_buffer.string
96
+ decompressed_text.force_encoding text.encoding
97
+
98
+ assert_equal text, decompressed_text
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ def test_large_texts
106
+ options_generator = OCG.new(
107
+ :text => LARGE_TEXTS,
108
+ :portion_length => LARGE_PORTION_LENGTHS
109
+ )
110
+
111
+ Common.parallel_options options_generator do |options|
112
+ text = options[:text]
113
+ portion_length = options[:portion_length]
114
+
115
+ compressed_text = String.compress text
116
+
117
+ decompressed_buffer = ::StringIO.new
118
+ decompressed_buffer.set_encoding ::Encoding::BINARY
119
+
120
+ writer = proc { |portion| decompressed_buffer << portion }
121
+ decompressor = Target.new
122
+
123
+ begin
124
+ source = "".b
125
+ compressed_text_offset = 0
126
+
127
+ loop do
128
+ portion = compressed_text.byteslice compressed_text_offset, portion_length
129
+ break if portion.nil?
130
+
131
+ compressed_text_offset += portion_length
132
+ source << portion
133
+
134
+ bytes_read = decompressor.read source, &writer
135
+ source = source.byteslice bytes_read, source.bytesize - bytes_read
136
+ end
137
+ ensure
138
+ decompressor.close(&writer)
139
+ end
140
+
141
+ decompressed_text = decompressed_buffer.string
142
+ decompressed_text.force_encoding text.encoding
143
+
144
+ assert_equal text, decompressed_text
145
+ end
146
+ end
147
+
148
+ # -----
149
+
150
+ def get_invalid_decompressor_options(&block)
151
+ Option.get_invalid_decompressor_options BUFFER_LENGTH_NAMES, &block
152
+ end
153
+
154
+ def parallel_compressor_options(&block)
155
+ Common.parallel_options Option.get_compressor_options_generator(BUFFER_LENGTH_NAMES), &block
156
+ end
157
+
158
+ def get_compatible_decompressor_options(compressor_options, &block)
159
+ Option.get_compatible_decompressor_options compressor_options, BUFFER_LENGTH_MAPPING, &block
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end