brotli 0.2.3 → 0.5.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.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +37 -0
  3. data/.github/workflows/publish.yml +24 -0
  4. data/.gitmodules +1 -1
  5. data/Gemfile +6 -3
  6. data/README.md +2 -2
  7. data/Rakefile +16 -9
  8. data/brotli.gemspec +7 -13
  9. data/ext/brotli/brotli.c +210 -31
  10. data/ext/brotli/buffer.c +1 -7
  11. data/ext/brotli/buffer.h +1 -1
  12. data/ext/brotli/extconf.rb +25 -17
  13. data/lib/brotli/version.rb +1 -1
  14. data/test/brotli_test.rb +107 -0
  15. data/test/brotli_writer_test.rb +36 -0
  16. data/test/test_helper.rb +8 -0
  17. data/vendor/brotli/c/common/constants.c +15 -0
  18. data/vendor/brotli/c/common/constants.h +137 -0
  19. data/vendor/brotli/c/common/context.c +156 -0
  20. data/vendor/brotli/c/common/context.h +4 -152
  21. data/vendor/brotli/c/common/dictionary.bin.br +0 -0
  22. data/vendor/brotli/c/common/dictionary.c +14 -3
  23. data/vendor/brotli/c/common/platform.c +23 -0
  24. data/vendor/brotli/c/common/platform.h +95 -122
  25. data/vendor/brotli/c/common/shared_dictionary.c +521 -0
  26. data/vendor/brotli/c/common/shared_dictionary_internal.h +75 -0
  27. data/vendor/brotli/c/common/transform.c +60 -4
  28. data/vendor/brotli/c/common/transform.h +5 -0
  29. data/vendor/brotli/c/common/version.h +31 -6
  30. data/vendor/brotli/c/dec/bit_reader.c +34 -4
  31. data/vendor/brotli/c/dec/bit_reader.h +221 -107
  32. data/vendor/brotli/c/dec/decode.c +772 -403
  33. data/vendor/brotli/c/dec/huffman.c +7 -4
  34. data/vendor/brotli/c/dec/huffman.h +8 -13
  35. data/vendor/brotli/c/dec/prefix.h +1 -18
  36. data/vendor/brotli/c/dec/state.c +40 -21
  37. data/vendor/brotli/c/dec/state.h +201 -59
  38. data/vendor/brotli/c/enc/backward_references.c +88 -25
  39. data/vendor/brotli/c/enc/backward_references.h +10 -8
  40. data/vendor/brotli/c/enc/backward_references_hq.c +194 -80
  41. data/vendor/brotli/c/enc/backward_references_hq.h +17 -13
  42. data/vendor/brotli/c/enc/backward_references_inc.h +52 -16
  43. data/vendor/brotli/c/enc/bit_cost.c +8 -7
  44. data/vendor/brotli/c/enc/bit_cost.h +5 -4
  45. data/vendor/brotli/c/enc/block_splitter.c +40 -17
  46. data/vendor/brotli/c/enc/block_splitter.h +5 -4
  47. data/vendor/brotli/c/enc/block_splitter_inc.h +99 -49
  48. data/vendor/brotli/c/enc/brotli_bit_stream.c +142 -137
  49. data/vendor/brotli/c/enc/brotli_bit_stream.h +11 -6
  50. data/vendor/brotli/c/enc/cluster.c +10 -9
  51. data/vendor/brotli/c/enc/cluster.h +7 -6
  52. data/vendor/brotli/c/enc/cluster_inc.h +30 -22
  53. data/vendor/brotli/c/enc/command.c +28 -0
  54. data/vendor/brotli/c/enc/command.h +17 -16
  55. data/vendor/brotli/c/enc/compound_dictionary.c +207 -0
  56. data/vendor/brotli/c/enc/compound_dictionary.h +74 -0
  57. data/vendor/brotli/c/enc/compress_fragment.c +93 -83
  58. data/vendor/brotli/c/enc/compress_fragment.h +32 -7
  59. data/vendor/brotli/c/enc/compress_fragment_two_pass.c +100 -88
  60. data/vendor/brotli/c/enc/compress_fragment_two_pass.h +21 -3
  61. data/vendor/brotli/c/enc/dictionary_hash.c +1829 -1101
  62. data/vendor/brotli/c/enc/dictionary_hash.h +2 -1
  63. data/vendor/brotli/c/enc/encode.c +550 -416
  64. data/vendor/brotli/c/enc/encoder_dict.c +613 -5
  65. data/vendor/brotli/c/enc/encoder_dict.h +120 -4
  66. data/vendor/brotli/c/enc/entropy_encode.c +5 -2
  67. data/vendor/brotli/c/enc/entropy_encode.h +4 -3
  68. data/vendor/brotli/c/enc/entropy_encode_static.h +5 -2
  69. data/vendor/brotli/c/enc/fast_log.c +105 -0
  70. data/vendor/brotli/c/enc/fast_log.h +21 -101
  71. data/vendor/brotli/c/enc/find_match_length.h +17 -25
  72. data/vendor/brotli/c/enc/hash.h +350 -120
  73. data/vendor/brotli/c/enc/hash_composite_inc.h +71 -67
  74. data/vendor/brotli/c/enc/hash_forgetful_chain_inc.h +92 -51
  75. data/vendor/brotli/c/enc/hash_longest_match64_inc.h +79 -84
  76. data/vendor/brotli/c/enc/hash_longest_match_inc.h +53 -54
  77. data/vendor/brotli/c/enc/hash_longest_match_quickly_inc.h +93 -62
  78. data/vendor/brotli/c/enc/hash_rolling_inc.h +25 -29
  79. data/vendor/brotli/c/enc/hash_to_binary_tree_inc.h +42 -40
  80. data/vendor/brotli/c/enc/histogram.c +4 -4
  81. data/vendor/brotli/c/enc/histogram.h +7 -6
  82. data/vendor/brotli/c/enc/literal_cost.c +20 -15
  83. data/vendor/brotli/c/enc/literal_cost.h +4 -2
  84. data/vendor/brotli/c/enc/memory.c +29 -5
  85. data/vendor/brotli/c/enc/memory.h +43 -14
  86. data/vendor/brotli/c/enc/metablock.c +95 -85
  87. data/vendor/brotli/c/enc/metablock.h +9 -8
  88. data/vendor/brotli/c/enc/metablock_inc.h +9 -7
  89. data/vendor/brotli/c/enc/params.h +7 -4
  90. data/vendor/brotli/c/enc/prefix.h +3 -2
  91. data/vendor/brotli/c/enc/quality.h +40 -3
  92. data/vendor/brotli/c/enc/ringbuffer.h +8 -4
  93. data/vendor/brotli/c/enc/state.h +104 -0
  94. data/vendor/brotli/c/enc/static_dict.c +60 -4
  95. data/vendor/brotli/c/enc/static_dict.h +3 -2
  96. data/vendor/brotli/c/enc/static_dict_lut.h +2 -0
  97. data/vendor/brotli/c/enc/utf8_util.c +2 -2
  98. data/vendor/brotli/c/enc/utf8_util.h +2 -1
  99. data/vendor/brotli/c/enc/write_bits.h +29 -26
  100. data/vendor/brotli/c/include/brotli/decode.h +67 -2
  101. data/vendor/brotli/c/include/brotli/encode.h +77 -3
  102. data/vendor/brotli/c/include/brotli/port.h +34 -3
  103. data/vendor/brotli/c/include/brotli/shared_dictionary.h +100 -0
  104. metadata +23 -97
  105. data/.travis.yml +0 -31
  106. data/docs/Brotli/Error.html +0 -124
  107. data/docs/Brotli.html +0 -485
  108. data/docs/_index.html +0 -122
  109. data/docs/class_list.html +0 -51
  110. data/docs/css/common.css +0 -1
  111. data/docs/css/full_list.css +0 -58
  112. data/docs/css/style.css +0 -496
  113. data/docs/file.README.html +0 -127
  114. data/docs/file_list.html +0 -56
  115. data/docs/frames.html +0 -17
  116. data/docs/index.html +0 -127
  117. data/docs/js/app.js +0 -292
  118. data/docs/js/full_list.js +0 -216
  119. data/docs/js/jquery.js +0 -4
  120. data/docs/method_list.html +0 -67
  121. data/docs/top-level-namespace.html +0 -110
  122. data/spec/brotli_spec.rb +0 -88
  123. data/spec/inflate_spec.rb +0 -75
  124. data/spec/spec_helper.rb +0 -4
data/spec/brotli_spec.rb DELETED
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
- require 'zlib'
3
-
4
- describe Brotli do
5
- let!(:data) { File.binread File.expand_path(File.join(File.dirname(__FILE__), '..', 'vendor', 'brotli', 'tests', 'testdata', 'alice29.txt'), __FILE__) }
6
-
7
- context 'deflate/inflate' do
8
- it 'with example data' do
9
- bkup = data.dup
10
- compressed = Brotli.deflate(data)
11
- expect(data).to eq bkup
12
- bkup = compressed.dup
13
- decompressed = Brotli.inflate(compressed)
14
- expect(compressed).to eq bkup
15
- expect(decompressed).to eq data
16
- end
17
-
18
- it 'with random data' do
19
- property_of {
20
- string
21
- }.check { |str|
22
- bkup = str.dup
23
- compressed = Brotli.deflate(str)
24
- expect(str).to eq bkup
25
- bkup = compressed.dup
26
- decompressed = Brotli.inflate(compressed)
27
- expect(compressed).to eq bkup
28
- expect(decompressed).to eq str
29
- }
30
- end
31
- end
32
-
33
- it 'deflate options' do
34
- expect { Brotli.deflate(data, mode: :generic) }.to_not raise_error
35
- expect { Brotli.deflate(data, mode: :text) }.to_not raise_error
36
- expect { Brotli.deflate(data, mode: :font) }.to_not raise_error
37
- expect { Brotli.deflate(data, mode: 'generic') }.to raise_error ArgumentError
38
- expect { Brotli.deflate(data, mode: 'text') }.to raise_error ArgumentError
39
- expect { Brotli.deflate(data, mode: 'font') }.to raise_error ArgumentError
40
-
41
- expect { Brotli.deflate(data, quality: -1) }.to raise_error ArgumentError
42
- expect { Brotli.deflate(data, quality: 0) }.to_not raise_error
43
- expect { Brotli.deflate(data, quality: 11) }.to_not raise_error
44
- expect { Brotli.deflate(data, quality: 12) }.to raise_error ArgumentError
45
-
46
- expect { Brotli.deflate(data, lgwin: 9) }.to raise_error ArgumentError
47
- expect { Brotli.deflate(data, lgwin: 10) }.to_not raise_error
48
- expect { Brotli.deflate(data, lgwin: 24) }.to_not raise_error
49
- expect { Brotli.deflate(data, lgwin: 25) }.to raise_error ArgumentError
50
-
51
- expect { Brotli.deflate(data, lgblock: 15) }.to raise_error ArgumentError
52
- expect { Brotli.deflate(data, lgblock: 16) }.to_not raise_error
53
- expect { Brotli.deflate(data, lgblock: 24) }.to_not raise_error
54
- expect { Brotli.deflate(data, lgblock: 25) }.to raise_error ArgumentError
55
- expect { Brotli.deflate(data, lgblock: -1) }.to raise_error ArgumentError
56
- expect { Brotli.deflate(data, lgblock: 0) }.to_not raise_error
57
- expect { Brotli.deflate(data, lgblock: 1) }.to raise_error ArgumentError
58
- end
59
-
60
- context 'benchmark' do
61
- it 'ratio' do
62
- compressed = Zlib.deflate(data, Zlib::BEST_COMPRESSION)
63
- zlib_compressed_bytesize = compressed.bytesize
64
- zlib_compression_ratio = (compressed.bytesize / data.bytesize.to_f * 100).round(3)
65
- puts "Zlib size: #{zlib_compressed_bytesize}, compress ratio: #{zlib_compression_ratio} %"
66
-
67
- compressed = Brotli.deflate(data)
68
- brotli_compressed_bytesize = compressed.bytesize
69
- brotli_compression_ratio = (compressed.bytesize / data.bytesize.to_f * 100).round(3)
70
- puts "Brotli size: #{brotli_compressed_bytesize}, compress ratio: #{brotli_compression_ratio} %"
71
-
72
- expect(brotli_compressed_bytesize).to be < zlib_compressed_bytesize
73
- expect(brotli_compression_ratio).to be < zlib_compression_ratio
74
-
75
- compressed = Brotli.deflate(data, mode: :text, quality: 11, lgwin: 24, lgblock: 0)
76
- puts "Brotli(text/11/24/0) size: #{compressed.bytesize}, compress ratio: #{(compressed.bytesize / data.bytesize.to_f * 100).round(3)} %"
77
- compressed = Brotli.deflate(data, mode: :generic, quality: 11, lgwin: 24, lgblock: 24)
78
- puts "Brotli(generic/11/24/24) size: #{compressed.bytesize}, compress ratio: #{(compressed.bytesize / data.bytesize.to_f * 100).round(3)} %"
79
- compressed = Brotli.deflate(data, mode: :text, quality: 11, lgwin: 24, lgblock: 24)
80
- puts "Brotli(text/11/24/24) size: #{compressed.bytesize}, compress ratio: #{(compressed.bytesize / data.bytesize.to_f * 100).round(3)} %"
81
- end
82
- end
83
-
84
- it 'inflate' do
85
- compressed = File.binread File.expand_path(File.join(File.dirname(__FILE__), '..', 'vendor', 'brotli', 'tests', 'testdata', 'alice29.txt.compressed'), __FILE__)
86
- expect(Brotli.inflate(compressed)).to eq data
87
- end
88
- end
data/spec/inflate_spec.rb DELETED
@@ -1,75 +0,0 @@
1
- require 'spec_helper'
2
- require 'benchmark'
3
- require 'thread'
4
-
5
- describe Brotli do
6
- context 'deflate' do
7
- let(:sample) { 10 }
8
- let(:datum) { File.binread File.expand_path(File.join(File.dirname(__FILE__), '..', 'vendor', 'brotli', 'tests', 'testdata', 'lcet10.txt'), __FILE__) }
9
- let!(:data) { sample.times.map { datum.dup } }
10
-
11
- it 'seq' do
12
- t = Benchmark.realtime do
13
- data.each { |datum| Brotli.deflate datum }
14
- end
15
- puts t
16
- # 7.183561000041664
17
- end
18
-
19
- it '5 threads' do
20
- q = Queue.new
21
- data.each { |datum| q.push datum }
22
- 5.times { q.push nil }
23
-
24
- w = 5.times.map do
25
- Thread.new do
26
- while data = q.pop
27
- Brotli.deflate data
28
- end
29
- end
30
- end
31
-
32
- t = Benchmark.realtime do
33
- w.each(&:join)
34
- end
35
- puts t
36
- # 1.7900010000448674
37
- end
38
- end
39
-
40
- context 'inflate' do
41
- let(:sample) { 1000 }
42
- let(:datum) { File.binread File.expand_path(File.join(File.dirname(__FILE__), '..', 'vendor', 'brotli', 'tests', 'testdata', 'lcet10.txt.compressed'), __FILE__) }
43
- let!(:data) { sample.times.map { datum.dup } }
44
-
45
- it 'seq' do
46
- t = Benchmark.realtime do
47
- data.each { |datum| Brotli.inflate datum }
48
- end
49
- puts t
50
- # w/ gvl 1.6123949999455363
51
- # w/o gvl 1.5788109998684376
52
- end
53
-
54
- it '5 threads' do
55
- q = Queue.new
56
- data.each { |datum| q.push datum }
57
- 5.times { q.push nil }
58
-
59
- w = 5.times.map do
60
- Thread.new do
61
- while data = q.pop
62
- Brotli.inflate data
63
- end
64
- end
65
- end
66
-
67
- t = Benchmark.realtime do
68
- w.each(&:join)
69
- end
70
- puts t
71
- # w/ gvl 1.0620850000996143
72
- # w/o gvl 0.40698900003917515
73
- end
74
- end
75
- end
data/spec/spec_helper.rb DELETED
@@ -1,4 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
- require 'brotli'
3
- require 'rantly/rspec_extensions'
4
- require 'rantly/shrinks'