extlz4 0.2.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|