Skip to content

Commit fc8e158

Browse files
committed
test: addn and update update dict arguments
1 parent 06c0644 commit fc8e158

File tree

5 files changed

+262
-11
lines changed

5 files changed

+262
-11
lines changed

tests/dictionary_01_b.phpt

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
--TEST--
2+
zstd_compress(): use dict compress level
3+
--FILE--
4+
<?php
5+
include(dirname(__FILE__) . '/data.inc');
6+
$dictionary = file_get_contents(dirname(__FILE__) . '/data.dic');
7+
8+
function check_compress($data, $dictionary, $level)
9+
{
10+
$output = (string)zstd_compress($data, $level, $dictionary);
11+
echo $level, ' -- ', strlen($dictionary), ' -- ', strlen($output), ' -- ',
12+
var_export(zstd_uncompress($output, $dictionary) === $data, true), PHP_EOL;
13+
}
14+
15+
echo "*** Data size ***", PHP_EOL;
16+
echo strlen($data), PHP_EOL;
17+
18+
echo "*** Compression Level ***", PHP_EOL;
19+
for (
20+
$level = ZSTD_COMPRESS_LEVEL_MIN;
21+
$level <= ZSTD_COMPRESS_LEVEL_MAX;
22+
$level++
23+
) {
24+
check_compress($data, $dictionary, $level);
25+
}
26+
27+
echo "*** Faster compression Level ***", PHP_EOL;
28+
for ($level = -1; $level >= -5; $level--) {
29+
check_compress($data, $dictionary, $level);
30+
}
31+
32+
echo "*** Invalid Compression Level ***", PHP_EOL;
33+
check_compress($data, $dictionary, 100);
34+
?>
35+
===Done===
36+
--EXPECTF--
37+
*** Data size ***
38+
3547
39+
*** Compression Level ***
40+
1 -- 142 -- 1%d -- true
41+
2 -- 142 -- 1%d -- true
42+
3 -- 142 -- 1%d -- true
43+
4 -- 142 -- 1%d -- true
44+
5 -- 142 -- 1%d -- true
45+
6 -- 142 -- 1%d -- true
46+
7 -- 142 -- 1%d -- true
47+
8 -- 142 -- 1%d -- true
48+
9 -- 142 -- 1%d -- true
49+
10 -- 142 -- 1%d -- true
50+
11 -- 142 -- 1%d -- true
51+
12 -- 142 -- 1%d -- true
52+
13 -- 142 -- 1%d -- true
53+
14 -- 142 -- 1%d -- true
54+
15 -- 142 -- 1%d -- true
55+
16 -- 142 -- 1%d -- true
56+
17 -- 142 -- 1%d -- true
57+
18 -- 142 -- 1%d -- true
58+
19 -- 142 -- 1%d -- true
59+
20 -- 142 -- 1%d -- true
60+
21 -- 142 -- 1%d -- true
61+
22 -- 142 -- 1%d -- true
62+
*** Faster compression Level ***
63+
-1 -- 142 -- %d -- true
64+
-2 -- 142 -- %d -- true
65+
-3 -- 142 -- %d -- true
66+
-4 -- 142 -- %d -- true
67+
-5 -- 142 -- %d -- true
68+
*** Invalid Compression Level ***
69+
70+
Warning: zstd_compress(): compression level (100) must be within 1..22 or smaller then 0 in %s on line %d
71+
100 -- 142 -- 0 --
72+
Warning: zstd_uncompress(): it was not compressed by zstd in %s
73+
false
74+
===Done===

tests/dictionary_b.phpt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
--TEST--
2+
zstd_compress(): use dict
3+
--SKIPIF--
4+
--FILE--
5+
<?php
6+
include(dirname(__FILE__) . '/data.inc');
7+
$dictionary = file_get_contents(dirname(__FILE__) . '/data.dic');
8+
9+
function check_compress_dict($data, $dictionary)
10+
{
11+
$output = (string)zstd_compress($data, ZSTD_COMPRESS_LEVEL_DEFAULT, $dictionary);
12+
echo strlen($dictionary), ' -- ', strlen($output), ' -- ',
13+
var_export(zstd_uncompress($output, $dictionary) === $data, true), PHP_EOL;
14+
}
15+
16+
echo "*** Data size ***", PHP_EOL;
17+
echo strlen($data), PHP_EOL;
18+
19+
echo "*** Dictionary Compression ***", PHP_EOL;
20+
check_compress_dict($data, $dictionary);
21+
?>
22+
===Done===
23+
--EXPECTF--
24+
*** Data size ***
25+
3547
26+
*** Dictionary Compression ***
27+
142 -- 1%d -- true
28+
===Done===

tests/inc_dictionary.phpt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
--TEST--
2+
Incremental dictionary compression
3+
--FILE--
4+
<?php
5+
include(dirname(__FILE__) . '/data.inc');
6+
$dictionary = file_get_contents(dirname(__FILE__) . '/data.dic');
7+
8+
foreach ([128, 512, 1024] as $size) {
9+
var_dump($size);
10+
$handle = zstd_compress_init(ZSTD_COMPRESS_LEVEL_DEFAULT, $dictionary);
11+
var_dump($handle);
12+
13+
$pos= 0;
14+
$compressed = '';
15+
while ($pos < strlen($data)) {
16+
$chunk = substr($data, $pos, $size);
17+
$compressed .= zstd_compress_add($handle, $chunk, false);
18+
$pos += strlen($chunk);
19+
}
20+
$compressed .= zstd_compress_add($handle, '', true);
21+
var_dump(strlen($compressed), strlen($compressed) < strlen($data));
22+
23+
var_dump($data === zstd_uncompress($compressed, $dictionary));
24+
25+
$handle = zstd_uncompress_init($dictionary);
26+
var_dump($handle);
27+
28+
$pos= 0;
29+
$uncompressed = '';
30+
while ($pos < strlen($compressed)) {
31+
$chunk = substr($compressed, $pos, $size);
32+
$uncompressed .= zstd_uncompress_add($handle, $chunk);
33+
$pos += strlen($chunk);
34+
}
35+
36+
var_dump($data === $uncompressed);
37+
}
38+
?>
39+
===Done===
40+
--EXPECTF--
41+
int(128)
42+
object(Zstd\Compress\Context)#%d (0) {
43+
}
44+
int(%d)
45+
bool(true)
46+
bool(true)
47+
object(Zstd\UnCompress\Context)#%d (0) {
48+
}
49+
bool(true)
50+
int(512)
51+
object(Zstd\Compress\Context)#%d (0) {
52+
}
53+
int(%d)
54+
bool(true)
55+
bool(true)
56+
object(Zstd\UnCompress\Context)#%d (0) {
57+
}
58+
bool(true)
59+
int(1024)
60+
object(Zstd\Compress\Context)#%d (0) {
61+
}
62+
int(%d)
63+
bool(true)
64+
bool(true)
65+
object(Zstd\UnCompress\Context)#%d (0) {
66+
}
67+
bool(true)
68+
===Done===

tests/inc_named_args.phpt

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ if (PHP_VERSION_ID < 80000) die("skip requires PHP 8.0+");
77
--FILE--
88
<?php
99
include(dirname(__FILE__) . '/data.inc');
10+
$dictionary = file_get_contents(dirname(__FILE__) . '/data.dic');
1011

11-
function test($data, $level = 0) {
12-
echo "level={$level}\n";
12+
function test($data, $dict, $level = 0) {
13+
echo "level={$level},dict=", gettype($dict), "\n";
1314

1415
$compressed = '';
1516

16-
$context = zstd_compress_init(level: $level);
17+
$context = zstd_compress_init(level: $level, dict: $dict);
1718
if ($context === false) {
1819
echo "ERROR\n";
1920
return;
@@ -31,14 +32,14 @@ function test($data, $level = 0) {
3132
end: true,
3233
);
3334

34-
if ($data === zstd_uncompress(data: $compressed)) {
35+
if ($data === zstd_uncompress(data: $compressed, dict: $dict)) {
3536
echo "OK\n";
3637
} else {
3738
echo "ERROR: uncompress\n";
3839
}
3940

4041
$out = '';
41-
$context = zstd_uncompress_init();
42+
$context = zstd_uncompress_init(dict: $dict);
4243
foreach (str_split($compressed, 6) as $var) {
4344
$out .= zstd_uncompress_add(
4445
context: $context,
@@ -53,25 +54,42 @@ function test($data, $level = 0) {
5354
}
5455

5556
foreach ([0, 9, 22, 30, -1] as $level) {
56-
test($data, $level, 0);
57+
test($data, null, $level);
58+
test($data, $dictionary, $level);
5759
}
5860
?>
5961
===DONE===
6062
--EXPECTF--
61-
level=0
63+
level=0,dict=NULL
6264
OK
6365
Ok
64-
level=9
66+
level=0,dict=string
6567
OK
6668
Ok
67-
level=22
69+
level=9,dict=NULL
6870
OK
6971
Ok
70-
level=30
72+
level=9,dict=string
73+
OK
74+
Ok
75+
level=22,dict=NULL
76+
OK
77+
Ok
78+
level=22,dict=string
79+
OK
80+
Ok
81+
level=30,dict=NULL
7182

7283
Warning: zstd_compress_init(): compression level (30) must be within 1..22 or smaller then 0 in %s on line %d
7384
ERROR
74-
level=-1
85+
level=30,dict=string
86+
87+
Warning: zstd_compress_init(): compression level (30) must be within 1..22 or smaller then 0 in %s on line %d
88+
ERROR
89+
level=-1,dict=NULL
90+
OK
91+
Ok
92+
level=-1,dict=string
7593
OK
7694
Ok
7795
===DONE===

tests/named_args.phpt

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ if (PHP_VERSION_ID < 80000) die("skip requires PHP 8.0+");
99
include(dirname(__FILE__) . '/data.inc');
1010

1111
$level = ZSTD_COMPRESS_LEVEL_MAX;
12+
$dict = file_get_contents(dirname(__FILE__) . '/data.dic');
1213

1314
echo "** zstd_compress() **\n";
1415
try {
@@ -32,6 +33,13 @@ try {
3233
echo $e->getMessage(), PHP_EOL;
3334
}
3435

36+
echo "** zstd_compress(dict:) **\n";
37+
try {
38+
var_dump(gettype(zstd_compress(dict: $dict)));
39+
} catch (Error $e) {
40+
echo $e->getMessage(), PHP_EOL;
41+
}
42+
3543
echo "** zstd_compress(data:, level:) **\n";
3644
try {
3745
var_dump(gettype(zstd_compress(data: $data, level: $level)));
@@ -40,6 +48,29 @@ try {
4048
echo $e->getMessage(), PHP_EOL;
4149
}
4250

51+
echo "** zstd_compress(data:, dict:) **\n";
52+
try {
53+
var_dump(gettype(zstd_compress(data: $data, dict: $dict)));
54+
var_dump(zstd_uncompress(zstd_compress(data: $data, dict: $dict), $dict) === $data);
55+
} catch (Error $e) {
56+
echo $e->getMessage(), PHP_EOL;
57+
}
58+
59+
echo "** zstd_compress(level:, dict:) **\n";
60+
try {
61+
var_dump(gettype(zstd_compress(level: $level, dict: $dict)));
62+
} catch (Error $e) {
63+
echo $e->getMessage(), PHP_EOL;
64+
}
65+
66+
echo "** zstd_compress(data:, level:, dict:) **\n";
67+
try {
68+
var_dump(gettype(zstd_compress(data: $data, level: $level, dict: $dict)));
69+
var_dump(zstd_uncompress(zstd_compress(data: $data, level: $level, dict: $dict), $dict) === $data);
70+
} catch (Error $e) {
71+
echo $e->getMessage(), PHP_EOL;
72+
}
73+
4374
$compressed = zstd_compress(data: $data);
4475

4576
echo "** zstd_uncompress(): false **\n";
@@ -56,6 +87,23 @@ try {
5687
} catch (Error $e) {
5788
echo $e->getMessage(), PHP_EOL;
5889
}
90+
91+
echo "** zstd_uncompress(dict:) **\n";
92+
try {
93+
var_dump(gettype(zstd_uncompress(dict: $dict)));
94+
} catch (Error $e) {
95+
echo $e->getMessage(), PHP_EOL;
96+
}
97+
98+
$compressed = zstd_compress(data: $data, dict: $dict);
99+
100+
echo "** zstd_uncompress(data:, dict:) **\n";
101+
try {
102+
var_dump(gettype(zstd_uncompress(data: $compressed, dict: $dict)));
103+
var_dump(zstd_uncompress(data: $compressed, dict: $dict) === $data);
104+
} catch (Error $e) {
105+
echo $e->getMessage(), PHP_EOL;
106+
}
59107
?>
60108
===DONE===
61109
--EXPECTF--
@@ -66,12 +114,27 @@ string(6) "string"
66114
bool(true)
67115
** zstd_compress(level:) **
68116
zstd_compress(): Argument #1 ($data) not passed
117+
** zstd_compress(dict:) **
118+
zstd_compress(): Argument #1 ($data) not passed
69119
** zstd_compress(data:, level:) **
70120
string(6) "string"
71121
bool(true)
122+
** zstd_compress(data:, dict:) **
123+
string(6) "string"
124+
bool(true)
125+
** zstd_compress(level:, dict:) **
126+
zstd_compress(): Argument #1 ($data) not passed
127+
** zstd_compress(data:, level:, dict:) **
128+
string(6) "string"
129+
bool(true)
72130
** zstd_uncompress(): false **
73131
zstd_uncompress() expects at least 1 argument, 0 given
74132
** zstd_uncompress(data:) **
75133
string(6) "string"
76134
bool(true)
135+
** zstd_uncompress(dict:) **
136+
zstd_uncompress(): Argument #1 ($data) not passed
137+
** zstd_uncompress(data:, dict:) **
138+
string(6) "string"
139+
bool(true)
77140
===DONE===

0 commit comments

Comments
 (0)