extlz4 0.2.4.2
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.
- checksums.yaml +7 -0
- data/HISTORY.ja.md +116 -0
- data/LICENSE +24 -0
- data/README.md +203 -0
- data/Rakefile +212 -0
- data/bin/extlz4 +220 -0
- data/contrib/lz4/INSTALL +15 -0
- data/contrib/lz4/LICENSE +11 -0
- data/contrib/lz4/NEWS +231 -0
- data/contrib/lz4/README.md +114 -0
- data/contrib/lz4/circle.yml +39 -0
- data/contrib/lz4/lib/LICENSE +24 -0
- data/contrib/lz4/lib/README.md +73 -0
- data/contrib/lz4/lib/liblz4.pc.in +14 -0
- data/contrib/lz4/lib/lz4.c +1478 -0
- data/contrib/lz4/lib/lz4.h +463 -0
- data/contrib/lz4/lib/lz4frame.c +1669 -0
- data/contrib/lz4/lib/lz4frame.h +391 -0
- data/contrib/lz4/lib/lz4frame_static.h +143 -0
- data/contrib/lz4/lib/lz4hc.c +807 -0
- data/contrib/lz4/lib/lz4hc.h +278 -0
- data/contrib/lz4/lib/lz4opt.h +366 -0
- data/contrib/lz4/lib/xxhash.c +894 -0
- data/contrib/lz4/lib/xxhash.h +293 -0
- data/examples/frameapi.rb +43 -0
- data/ext/blockapi.c +1046 -0
- data/ext/depend +4 -0
- data/ext/extconf.rb +60 -0
- data/ext/extlz4.c +69 -0
- data/ext/extlz4.h +109 -0
- data/ext/frameapi.c +780 -0
- data/ext/hashargs.c +151 -0
- data/ext/hashargs.h +110 -0
- data/ext/lz4_amalgam.c +31 -0
- data/gemstub.rb +40 -0
- data/lib/extlz4.rb +327 -0
- data/lib/extlz4/compat.rb +12 -0
- data/lib/extlz4/fix-0.1bug.rb +96 -0
- data/lib/extlz4/oldstream.rb +529 -0
- data/lib/extlz4/version.rb +3 -0
- data/test/common.rb +18 -0
- data/test/test_blockapi.rb +105 -0
- data/test/test_frameapi.rb +59 -0
- metadata +126 -0
data/test/common.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require "openssl" # for OpenSSL::Random.random_bytes
|
2
|
+
require "digest"
|
3
|
+
|
4
|
+
SMALLSIZE = 400
|
5
|
+
BIGSIZE = 12000000
|
6
|
+
|
7
|
+
SAMPLES = {
|
8
|
+
"empty" => "",
|
9
|
+
"\\0 (small size)" => "\0".b * SMALLSIZE,
|
10
|
+
"\\0 (big size)" => "\0".b * BIGSIZE,
|
11
|
+
"\\xaa (small size)" => "\xaa".b * SMALLSIZE,
|
12
|
+
"\\xaa (big size)" => "\xaa".b * BIGSIZE,
|
13
|
+
"random (small size)" => OpenSSL::Random.random_bytes(SMALLSIZE),
|
14
|
+
"random (big size)" => OpenSSL::Random.random_bytes(BIGSIZE),
|
15
|
+
}
|
16
|
+
|
17
|
+
SAMPLES["freebsd ports index"] = File.read("/usr/ports/INDEX-10", mode: "rb") rescue nil # if on FreeBSD
|
18
|
+
SAMPLES["freebsd kernel"] = File.read("/boot/kernel/kernel", mode: "rb") rescue nil # if on FreeBSD
|
@@ -0,0 +1,105 @@
|
|
1
|
+
#!ruby
|
2
|
+
|
3
|
+
require "test-unit"
|
4
|
+
require "extlz4"
|
5
|
+
|
6
|
+
require_relative "common"
|
7
|
+
|
8
|
+
class TestBlockAPI < Test::Unit::TestCase
|
9
|
+
unless Object.const_defined?(:FrozenError)
|
10
|
+
# NOTE: FrozenError は ruby-2.5 で登場
|
11
|
+
FrozenError = RuntimeError
|
12
|
+
end
|
13
|
+
|
14
|
+
SAMPLES.each_pair do |name, data|
|
15
|
+
[-20, -10, -1, nil, 0, 1, 9].each do |level|
|
16
|
+
define_method("test_block_encode_decode_sample:#{name}:level=#{level.inspect}", -> {
|
17
|
+
assert(data, LZ4.block_decode(LZ4.block_encode(level, data)))
|
18
|
+
})
|
19
|
+
|
20
|
+
[[], [data]].each do |opt_dict|
|
21
|
+
define_method("test_streaming_block_encode_decode:#{name}:level=#{level.inspect}#{opt_dict.empty? ? nil : ":with predict"}", -> {
|
22
|
+
lz4 = LZ4.block_stream_encode level, *opt_dict
|
23
|
+
input = StringIO.new(data)
|
24
|
+
buf = "".b
|
25
|
+
blocks = []
|
26
|
+
input.size.times do |size|
|
27
|
+
break unless input.read((1 << size) + 1, buf)
|
28
|
+
blocks << lz4.update(buf)
|
29
|
+
end
|
30
|
+
lz4.free
|
31
|
+
|
32
|
+
lz4 = LZ4.block_stream_decode *opt_dict
|
33
|
+
data1 = "".b
|
34
|
+
blocks.each do |b|
|
35
|
+
data1 << lz4.update(b)
|
36
|
+
end
|
37
|
+
lz4.free
|
38
|
+
|
39
|
+
assert(data, data1)
|
40
|
+
})
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_block_encode
|
46
|
+
buf = ""
|
47
|
+
assert_kind_of(String, LZ4.block_encode(SAMPLES["\\0 (small size)"]))
|
48
|
+
assert_kind_of(String, LZ4.block_encode(SAMPLES["\\0 (small size)"], 1000))
|
49
|
+
assert_same(buf, LZ4.block_encode(SAMPLES["\\0 (small size)"], buf))
|
50
|
+
assert_same(buf, LZ4.block_encode(SAMPLES["\\0 (small size)"], 1000, buf))
|
51
|
+
assert_same(buf, LZ4.block_encode(nil, SAMPLES["\\0 (small size)"], 1000, buf))
|
52
|
+
|
53
|
+
# high speed
|
54
|
+
assert_kind_of(String, LZ4.block_encode(-15, SAMPLES["\\0 (small size)"]))
|
55
|
+
assert_kind_of(String, LZ4.block_encode(-15, SAMPLES["\\0 (small size)"], 1000))
|
56
|
+
assert_same(buf, LZ4.block_encode(-15, SAMPLES["\\0 (small size)"], buf))
|
57
|
+
assert_same(buf, LZ4.block_encode(-15, SAMPLES["\\0 (small size)"], 1000, buf))
|
58
|
+
|
59
|
+
# high compression
|
60
|
+
assert_kind_of(String, LZ4.block_encode(0, SAMPLES["\\0 (small size)"]))
|
61
|
+
assert_kind_of(String, LZ4.block_encode(0, SAMPLES["\\0 (small size)"], 1000))
|
62
|
+
assert_same(buf, LZ4.block_encode(0, SAMPLES["\\0 (small size)"], buf))
|
63
|
+
assert_same(buf, LZ4.block_encode(0, SAMPLES["\\0 (small size)"], 1000, buf))
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_block_encode_invalid_args
|
67
|
+
src = SAMPLES["\\0 (small size)"]
|
68
|
+
buf = ""
|
69
|
+
assert_raise(ArgumentError) { LZ4.block_encode } # no arguments
|
70
|
+
assert_raise(TypeError) { LZ4.block_encode(100) } # source is not string
|
71
|
+
assert_raise(TypeError) { LZ4.block_encode(nil) } # source is not string
|
72
|
+
assert_raise(TypeError) { LZ4.block_encode(:bad_input) } # source is not string
|
73
|
+
assert_raise(TypeError) { LZ4.block_encode(/bad-input/) } # source is not string
|
74
|
+
assert_raise(FrozenError) { LZ4.block_encode(src, "bad-destbuf".freeze) } # can't modify frozen String
|
75
|
+
assert_raise(LZ4::Error) { LZ4.block_encode(src, 1) } # maxdest is too small
|
76
|
+
assert_raise(LZ4::Error) { LZ4.block_encode(src, 1, buf) } # maxdest is too small
|
77
|
+
assert_raise(TypeError) { LZ4.block_encode(src, "bad-maxsize", "a") } # "bad-maxsize" is not integer
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_block_decode
|
81
|
+
src = LZ4.block_encode(SAMPLES["\\0 (small size)"])
|
82
|
+
buf = ""
|
83
|
+
assert_kind_of(String, LZ4.block_decode(src))
|
84
|
+
assert_kind_of(String, LZ4.block_decode(src, 1000))
|
85
|
+
assert_same(buf, LZ4.block_decode(src, buf))
|
86
|
+
assert_same(buf, LZ4.block_decode(src, 1000, buf))
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_block_decode_invalid_args
|
90
|
+
src = LZ4.block_encode(SAMPLES["\\0 (small size)"])
|
91
|
+
buf = ""
|
92
|
+
assert_raise(ArgumentError) { LZ4.block_decode } # no arguments
|
93
|
+
assert_raise(TypeError) { LZ4.block_decode(-1, src) } # do not given level
|
94
|
+
assert_raise(TypeError) { LZ4.block_decode(100) } # source is not string
|
95
|
+
assert_raise(TypeError) { LZ4.block_decode(nil) } # source is not string
|
96
|
+
assert_raise(TypeError) { LZ4.block_decode(:bad_input) } # source is not string
|
97
|
+
assert_raise(TypeError) { LZ4.block_decode(/bad-input/) } # source is not string
|
98
|
+
assert_raise(FrozenError) { LZ4.block_decode(src, "bad-destbuf".freeze) } # can't modify frozen String
|
99
|
+
assert_raise(TypeError) { LZ4.block_decode(src, "bad-maxsize", "a") } # "bad-maxsize" is not integer
|
100
|
+
|
101
|
+
src2 = SAMPLES["\\xaa (small size)"]
|
102
|
+
assert_raise(LZ4::Error) { LZ4.block_decode(src2) } # encounted invalid end of sequence
|
103
|
+
assert_raise(LZ4::Error) { LZ4.block_decode(src2, 100000) } # max_dest_size is too small, or data is corrupted
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#!ruby
|
2
|
+
|
3
|
+
=begin
|
4
|
+
# 必要と思われる試験項目
|
5
|
+
|
6
|
+
* LZ4.encode
|
7
|
+
* LZ4.decode で伸長できるか
|
8
|
+
* lz4-cli で伸長できるか
|
9
|
+
* 汚染状態の伝搬
|
10
|
+
* security level
|
11
|
+
* LZ4.encode_file
|
12
|
+
* LZ4.decode_file で伸長できるか
|
13
|
+
* lz4-cli で伸長できるか
|
14
|
+
* LZ4.decode
|
15
|
+
* LZ4.decode_file
|
16
|
+
* LZ4.test_file
|
17
|
+
|
18
|
+
* 試験で用いる試料
|
19
|
+
* /usr/ports/INDEX-10
|
20
|
+
* /boot/kernel/kernel
|
21
|
+
* 長さ 0 の空データ
|
22
|
+
* 0 で埋められた小さなデータ
|
23
|
+
* 0 で埋められたでかいデータ
|
24
|
+
* 0xaa で埋められた小さなデータ
|
25
|
+
* 0xaa で埋められたでかいデータ
|
26
|
+
* /dev/random (4000 bytes)
|
27
|
+
* /dev/random (12000000 bytes)
|
28
|
+
* 可能であれば数十 GB レベルのファイル
|
29
|
+
=end
|
30
|
+
|
31
|
+
require "test-unit"
|
32
|
+
require "extlz4"
|
33
|
+
|
34
|
+
require_relative "common"
|
35
|
+
|
36
|
+
class TestFrameAPI < Test::Unit::TestCase
|
37
|
+
SAMPLES.each_pair do |name, data|
|
38
|
+
define_method("test_encode_decode_sample:#{name}", -> {
|
39
|
+
assert_equal(Digest::MD5.hexdigest(data), Digest::MD5.hexdigest(LZ4.decode(LZ4.encode(data))))
|
40
|
+
})
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_encode_args
|
44
|
+
assert_kind_of(LZ4::Encoder, LZ4.encode)
|
45
|
+
assert_kind_of(LZ4::Encoder, LZ4.encode(StringIO.new("")))
|
46
|
+
assert_kind_of(String, LZ4.encode {})
|
47
|
+
io = StringIO.new("")
|
48
|
+
assert_same(io, LZ4.encode(io) {})
|
49
|
+
assert_kind_of(LZ4::Encoder, LZ4.encode(io, 16))
|
50
|
+
assert_kind_of(LZ4::Encoder, LZ4::Encoder.new)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_decode_args
|
54
|
+
assert_raise(ArgumentError) { LZ4.decode }
|
55
|
+
assert_raise(NoMethodError) { LZ4.decode(nil) } # undefined method `read' for nil:NilClass
|
56
|
+
assert_raise(LZ4::Error) { LZ4.decode("") } # read error (or already EOF)
|
57
|
+
assert_raise(ArgumentError) { LZ4.decode(nil, nil) } # wrong number of arguments (2 for 1)
|
58
|
+
end
|
59
|
+
end
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: extlz4
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.4.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- dearblue
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-01-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: 'ruby bindings for LZ4 <https://github.com/lz4/lz4>.
|
28
|
+
|
29
|
+
'
|
30
|
+
email: dearblue@users.noreply.github.com
|
31
|
+
executables:
|
32
|
+
- extlz4
|
33
|
+
extensions:
|
34
|
+
- ext/extconf.rb
|
35
|
+
extra_rdoc_files:
|
36
|
+
- HISTORY.ja.md
|
37
|
+
- LICENSE
|
38
|
+
- README.md
|
39
|
+
- contrib/lz4/LICENSE
|
40
|
+
- contrib/lz4/README.md
|
41
|
+
- contrib/lz4/lib/LICENSE
|
42
|
+
- contrib/lz4/lib/README.md
|
43
|
+
- ext/blockapi.c
|
44
|
+
- ext/extlz4.c
|
45
|
+
- ext/extlz4.h
|
46
|
+
- ext/frameapi.c
|
47
|
+
- ext/hashargs.c
|
48
|
+
- ext/hashargs.h
|
49
|
+
- ext/lz4_amalgam.c
|
50
|
+
- lib/extlz4.rb
|
51
|
+
- lib/extlz4/compat.rb
|
52
|
+
- lib/extlz4/fix-0.1bug.rb
|
53
|
+
- lib/extlz4/oldstream.rb
|
54
|
+
- lib/extlz4/version.rb
|
55
|
+
files:
|
56
|
+
- HISTORY.ja.md
|
57
|
+
- LICENSE
|
58
|
+
- README.md
|
59
|
+
- Rakefile
|
60
|
+
- bin/extlz4
|
61
|
+
- contrib/lz4/INSTALL
|
62
|
+
- contrib/lz4/LICENSE
|
63
|
+
- contrib/lz4/NEWS
|
64
|
+
- contrib/lz4/README.md
|
65
|
+
- contrib/lz4/circle.yml
|
66
|
+
- contrib/lz4/lib/LICENSE
|
67
|
+
- contrib/lz4/lib/README.md
|
68
|
+
- contrib/lz4/lib/liblz4.pc.in
|
69
|
+
- contrib/lz4/lib/lz4.c
|
70
|
+
- contrib/lz4/lib/lz4.h
|
71
|
+
- contrib/lz4/lib/lz4frame.c
|
72
|
+
- contrib/lz4/lib/lz4frame.h
|
73
|
+
- contrib/lz4/lib/lz4frame_static.h
|
74
|
+
- contrib/lz4/lib/lz4hc.c
|
75
|
+
- contrib/lz4/lib/lz4hc.h
|
76
|
+
- contrib/lz4/lib/lz4opt.h
|
77
|
+
- contrib/lz4/lib/xxhash.c
|
78
|
+
- contrib/lz4/lib/xxhash.h
|
79
|
+
- examples/frameapi.rb
|
80
|
+
- ext/blockapi.c
|
81
|
+
- ext/depend
|
82
|
+
- ext/extconf.rb
|
83
|
+
- ext/extlz4.c
|
84
|
+
- ext/extlz4.h
|
85
|
+
- ext/frameapi.c
|
86
|
+
- ext/hashargs.c
|
87
|
+
- ext/hashargs.h
|
88
|
+
- ext/lz4_amalgam.c
|
89
|
+
- gemstub.rb
|
90
|
+
- lib/extlz4.rb
|
91
|
+
- lib/extlz4/compat.rb
|
92
|
+
- lib/extlz4/fix-0.1bug.rb
|
93
|
+
- lib/extlz4/oldstream.rb
|
94
|
+
- lib/extlz4/version.rb
|
95
|
+
- test/common.rb
|
96
|
+
- test/test_blockapi.rb
|
97
|
+
- test/test_frameapi.rb
|
98
|
+
homepage: https://github.com/dearblue/ruby-extlz4
|
99
|
+
licenses:
|
100
|
+
- BSD-2-Clause
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options:
|
104
|
+
- "--charset"
|
105
|
+
- UTF-8
|
106
|
+
- "-m"
|
107
|
+
- README.md
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
requirements: []
|
121
|
+
rubyforge_project:
|
122
|
+
rubygems_version: 2.6.14
|
123
|
+
signing_key:
|
124
|
+
specification_version: 4
|
125
|
+
summary: ruby bindings for LZ4
|
126
|
+
test_files: []
|