snappy 0.3.0-java → 0.4.0-java
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 +4 -4
- data/.github/workflows/main.yml +2 -2
- data/README.md +17 -1
- data/ext/extconf.rb +13 -11
- data/lib/snappy/version.rb +1 -1
- data/lib/snappy_ext.jar +0 -0
- data/snappy.gemspec +1 -0
- data/vendor/snappy/CMakeLists.txt +150 -27
- data/vendor/snappy/CONTRIBUTING.md +9 -4
- data/vendor/snappy/NEWS +12 -0
- data/vendor/snappy/README.md +52 -35
- data/vendor/snappy/cmake/config.h.in +28 -24
- data/vendor/snappy/snappy-internal.h +189 -25
- data/vendor/snappy/snappy-sinksource.cc +26 -9
- data/vendor/snappy/snappy-sinksource.h +11 -11
- data/vendor/snappy/snappy-stubs-internal.cc +1 -1
- data/vendor/snappy/snappy-stubs-internal.h +227 -308
- data/vendor/snappy/snappy-stubs-public.h.in +0 -11
- data/vendor/snappy/snappy-test.cc +88 -198
- data/vendor/snappy/snappy-test.h +102 -285
- data/vendor/snappy/snappy.cc +1176 -410
- data/vendor/snappy/snappy.h +19 -4
- data/vendor/snappy/snappy_benchmark.cc +378 -0
- data/vendor/snappy/snappy_compress_fuzzer.cc +3 -2
- data/vendor/snappy/snappy_test_data.cc +57 -0
- data/vendor/snappy/snappy_test_data.h +68 -0
- data/vendor/snappy/snappy_test_tool.cc +471 -0
- data/vendor/snappy/snappy_uncompress_fuzzer.cc +3 -2
- data/vendor/snappy/snappy_unittest.cc +170 -666
- metadata +8 -4
data/vendor/snappy/snappy-test.h
CHANGED
@@ -31,161 +31,91 @@
|
|
31
31
|
#ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_
|
32
32
|
#define THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_
|
33
33
|
|
34
|
-
#
|
35
|
-
#include
|
34
|
+
#if HAVE_CONFIG_H
|
35
|
+
#include "config.h"
|
36
|
+
#endif
|
36
37
|
|
37
38
|
#include "snappy-stubs-internal.h"
|
38
39
|
|
39
|
-
#
|
40
|
-
#include <stdarg.h>
|
41
|
-
|
42
|
-
#ifdef HAVE_SYS_MMAN_H
|
40
|
+
#if HAVE_SYS_MMAN_H
|
43
41
|
#include <sys/mman.h>
|
44
42
|
#endif
|
45
43
|
|
46
|
-
#
|
44
|
+
#if HAVE_SYS_RESOURCE_H
|
47
45
|
#include <sys/resource.h>
|
48
46
|
#endif
|
49
47
|
|
50
|
-
#
|
48
|
+
#if HAVE_SYS_TIME_H
|
51
49
|
#include <sys/time.h>
|
52
50
|
#endif
|
53
51
|
|
54
|
-
#
|
52
|
+
#if HAVE_WINDOWS_H
|
53
|
+
// Needed to be able to use std::max without workarounds in the source code.
|
54
|
+
// https://support.microsoft.com/en-us/help/143208/prb-using-stl-in-windows-program-can-cause-min-max-conflicts
|
55
|
+
#define NOMINMAX
|
55
56
|
#include <windows.h>
|
56
57
|
#endif
|
57
58
|
|
58
|
-
#
|
59
|
-
|
60
|
-
#include <gtest/gtest.h>
|
61
|
-
#undef TYPED_TEST
|
62
|
-
#define TYPED_TEST TEST
|
63
|
-
#define INIT_GTEST(argc, argv) ::testing::InitGoogleTest(argc, *argv)
|
64
|
-
|
65
|
-
#else
|
66
|
-
|
67
|
-
// Stubs for if the user doesn't have Google Test installed.
|
68
|
-
|
69
|
-
#define TEST(test_case, test_subcase) \
|
70
|
-
void Test_ ## test_case ## _ ## test_subcase()
|
71
|
-
#define INIT_GTEST(argc, argv)
|
72
|
-
|
73
|
-
#define TYPED_TEST TEST
|
74
|
-
#define EXPECT_EQ CHECK_EQ
|
75
|
-
#define EXPECT_NE CHECK_NE
|
76
|
-
#define EXPECT_FALSE(cond) CHECK(!(cond))
|
77
|
-
|
78
|
-
#endif
|
79
|
-
|
80
|
-
#ifdef HAVE_GFLAGS
|
81
|
-
|
82
|
-
#include <gflags/gflags.h>
|
83
|
-
|
84
|
-
// This is tricky; both gflags and Google Test want to look at the command line
|
85
|
-
// arguments. Google Test seems to be the most happy with unknown arguments,
|
86
|
-
// though, so we call it first and hope for the best.
|
87
|
-
#define InitGoogle(argv0, argc, argv, remove_flags) \
|
88
|
-
INIT_GTEST(argc, argv); \
|
89
|
-
google::ParseCommandLineFlags(argc, argv, remove_flags);
|
90
|
-
|
91
|
-
#else
|
59
|
+
#define InitGoogle(argv0, argc, argv, remove_flags) ((void)(0))
|
92
60
|
|
93
|
-
|
94
|
-
// changed at compile time.
|
95
|
-
#define DEFINE_int32(flag_name, default_value, description) \
|
96
|
-
static int FLAGS_ ## flag_name = default_value;
|
97
|
-
|
98
|
-
#define InitGoogle(argv0, argc, argv, remove_flags) \
|
99
|
-
INIT_GTEST(argc, argv)
|
100
|
-
|
101
|
-
#endif
|
102
|
-
|
103
|
-
#ifdef HAVE_LIBZ
|
61
|
+
#if HAVE_LIBZ
|
104
62
|
#include "zlib.h"
|
105
63
|
#endif
|
106
64
|
|
107
|
-
#
|
65
|
+
#if HAVE_LIBLZO2
|
108
66
|
#include "lzo/lzo1x.h"
|
109
67
|
#endif
|
110
68
|
|
111
|
-
|
69
|
+
#if HAVE_LIBLZ4
|
70
|
+
#include "lz4.h"
|
71
|
+
#endif
|
112
72
|
|
113
73
|
namespace file {
|
114
|
-
int Defaults() { return 0; }
|
115
|
-
|
116
|
-
class DummyStatus {
|
117
|
-
public:
|
118
|
-
void CheckSuccess() { }
|
119
|
-
};
|
120
|
-
|
121
|
-
DummyStatus GetContents(
|
122
|
-
const std::string& filename, std::string* data, int unused) {
|
123
|
-
FILE* fp = fopen(filename.c_str(), "rb");
|
124
|
-
if (fp == NULL) {
|
125
|
-
perror(filename.c_str());
|
126
|
-
exit(1);
|
127
|
-
}
|
128
|
-
|
129
|
-
data->clear();
|
130
|
-
while (!feof(fp)) {
|
131
|
-
char buf[4096];
|
132
|
-
size_t ret = fread(buf, 1, 4096, fp);
|
133
|
-
if (ret == 0 && ferror(fp)) {
|
134
|
-
perror("fread");
|
135
|
-
exit(1);
|
136
|
-
}
|
137
|
-
data->append(std::string(buf, ret));
|
138
|
-
}
|
139
|
-
|
140
|
-
fclose(fp);
|
141
|
-
|
142
|
-
return DummyStatus();
|
143
|
-
}
|
144
74
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
75
|
+
// Stubs the class file::Options.
|
76
|
+
//
|
77
|
+
// This class should not be instantiated explicitly. It should only be used by
|
78
|
+
// passing file::Defaults() to file::GetContents() / file::SetContents().
|
79
|
+
class OptionsStub {
|
80
|
+
public:
|
81
|
+
OptionsStub();
|
82
|
+
OptionsStub(const OptionsStub &) = delete;
|
83
|
+
OptionsStub &operator=(const OptionsStub &) = delete;
|
84
|
+
~OptionsStub();
|
85
|
+
};
|
152
86
|
|
153
|
-
|
154
|
-
if (ret != 1) {
|
155
|
-
perror("fwrite");
|
156
|
-
exit(1);
|
157
|
-
}
|
87
|
+
const OptionsStub &Defaults();
|
158
88
|
|
159
|
-
|
89
|
+
// Stubs the class absl::Status.
|
90
|
+
//
|
91
|
+
// This class should not be instantiated explicitly. It should only be used by
|
92
|
+
// passing the result of file::GetContents() / file::SetContents() to
|
93
|
+
// CHECK_OK().
|
94
|
+
class StatusStub {
|
95
|
+
public:
|
96
|
+
StatusStub();
|
97
|
+
StatusStub(const StatusStub &);
|
98
|
+
StatusStub &operator=(const StatusStub &);
|
99
|
+
~StatusStub();
|
160
100
|
|
161
|
-
|
162
|
-
|
163
|
-
} // namespace file
|
101
|
+
bool ok();
|
102
|
+
};
|
164
103
|
|
165
|
-
|
104
|
+
StatusStub GetContents(const std::string &file_name, std::string *output,
|
105
|
+
const OptionsStub & /* options */);
|
106
|
+
|
107
|
+
StatusStub SetContents(const std::string &file_name, const std::string &content,
|
108
|
+
const OptionsStub & /* options */);
|
109
|
+
|
110
|
+
} // namespace file
|
166
111
|
|
167
112
|
namespace snappy {
|
168
113
|
|
169
114
|
#define FLAGS_test_random_seed 301
|
170
|
-
using TypeParam = std::string;
|
171
|
-
|
172
|
-
void Test_CorruptedTest_VerifyCorrupted();
|
173
|
-
void Test_Snappy_SimpleTests();
|
174
|
-
void Test_Snappy_MaxBlowup();
|
175
|
-
void Test_Snappy_RandomData();
|
176
|
-
void Test_Snappy_FourByteOffset();
|
177
|
-
void Test_SnappyCorruption_TruncatedVarint();
|
178
|
-
void Test_SnappyCorruption_UnterminatedVarint();
|
179
|
-
void Test_SnappyCorruption_OverflowingVarint();
|
180
|
-
void Test_Snappy_ReadPastEndOfBuffer();
|
181
|
-
void Test_Snappy_FindMatchLength();
|
182
|
-
void Test_Snappy_FindMatchLengthRandom();
|
183
115
|
|
184
116
|
std::string ReadTestDataFile(const std::string& base, size_t size_limit);
|
185
117
|
|
186
|
-
std::
|
187
|
-
|
188
|
-
// A sprintf() variant that returns a std::string.
|
118
|
+
// A std::sprintf() variant that returns a std::string.
|
189
119
|
// Not safe for general use due to truncation issues.
|
190
120
|
std::string StrFormat(const char* format, ...);
|
191
121
|
|
@@ -193,17 +123,18 @@ std::string StrFormat(const char* format, ...);
|
|
193
123
|
// system time changing.
|
194
124
|
class CycleTimer {
|
195
125
|
public:
|
196
|
-
CycleTimer() : real_time_us_(0) {}
|
126
|
+
inline CycleTimer() : real_time_us_(0) {}
|
127
|
+
inline ~CycleTimer() = default;
|
197
128
|
|
198
|
-
void Start() {
|
129
|
+
inline void Start() {
|
199
130
|
#ifdef WIN32
|
200
131
|
QueryPerformanceCounter(&start_);
|
201
132
|
#else
|
202
|
-
gettimeofday(&start_,
|
133
|
+
::gettimeofday(&start_, nullptr);
|
203
134
|
#endif
|
204
135
|
}
|
205
136
|
|
206
|
-
void Stop() {
|
137
|
+
inline void Stop() {
|
207
138
|
#ifdef WIN32
|
208
139
|
LARGE_INTEGER stop;
|
209
140
|
LARGE_INTEGER frequency;
|
@@ -214,67 +145,78 @@ class CycleTimer {
|
|
214
145
|
frequency.QuadPart;
|
215
146
|
real_time_us_ += elapsed * 1e6 + 0.5;
|
216
147
|
#else
|
217
|
-
struct timeval stop;
|
218
|
-
gettimeofday(&stop,
|
148
|
+
struct ::timeval stop;
|
149
|
+
::gettimeofday(&stop, nullptr);
|
219
150
|
|
220
151
|
real_time_us_ += 1000000 * (stop.tv_sec - start_.tv_sec);
|
221
152
|
real_time_us_ += (stop.tv_usec - start_.tv_usec);
|
222
153
|
#endif
|
223
154
|
}
|
224
155
|
|
225
|
-
double Get() {
|
226
|
-
return real_time_us_ * 1e-6;
|
227
|
-
}
|
156
|
+
inline double Get() { return real_time_us_ * 1e-6; }
|
228
157
|
|
229
158
|
private:
|
230
|
-
|
159
|
+
int64_t real_time_us_;
|
231
160
|
#ifdef WIN32
|
232
161
|
LARGE_INTEGER start_;
|
233
162
|
#else
|
234
|
-
struct timeval start_;
|
163
|
+
struct ::timeval start_;
|
235
164
|
#endif
|
236
165
|
};
|
237
166
|
|
238
|
-
//
|
167
|
+
// Logging.
|
168
|
+
|
169
|
+
class LogMessage {
|
170
|
+
public:
|
171
|
+
inline LogMessage() = default;
|
172
|
+
~LogMessage();
|
239
173
|
|
240
|
-
|
174
|
+
LogMessage &operator<<(const std::string &message);
|
175
|
+
LogMessage &operator<<(int number);
|
176
|
+
};
|
241
177
|
|
242
|
-
class
|
178
|
+
class LogMessageCrash : public LogMessage {
|
243
179
|
public:
|
244
|
-
|
245
|
-
|
180
|
+
inline LogMessageCrash() = default;
|
181
|
+
~LogMessageCrash();
|
182
|
+
};
|
246
183
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
return this;
|
251
|
-
}
|
184
|
+
// This class is used to explicitly ignore values in the conditional
|
185
|
+
// logging macros. This avoids compiler warnings like "value computed
|
186
|
+
// is not used" and "statement has no effect".
|
252
187
|
|
253
|
-
|
188
|
+
class LogMessageVoidify {
|
189
|
+
public:
|
190
|
+
inline LogMessageVoidify() = default;
|
191
|
+
inline ~LogMessageVoidify() = default;
|
254
192
|
|
255
|
-
|
256
|
-
|
257
|
-
const
|
258
|
-
int start_, stop_;
|
193
|
+
// This has to be an operator with a precedence lower than << but
|
194
|
+
// higher than ?:
|
195
|
+
inline void operator&(const LogMessage &) {}
|
259
196
|
};
|
260
|
-
#define BENCHMARK(benchmark_name) \
|
261
|
-
Benchmark* Benchmark_ ## benchmark_name = \
|
262
|
-
(new Benchmark(#benchmark_name, benchmark_name))
|
263
197
|
|
264
|
-
|
265
|
-
|
266
|
-
extern Benchmark* Benchmark_BM_UValidate;
|
267
|
-
extern Benchmark* Benchmark_BM_ZFlat;
|
268
|
-
extern Benchmark* Benchmark_BM_ZFlatAll;
|
269
|
-
extern Benchmark* Benchmark_BM_ZFlatIncreasingTableSize;
|
198
|
+
// Asserts, both versions activated in debug mode only,
|
199
|
+
// and ones that are always active.
|
270
200
|
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
201
|
+
#define CRASH_UNLESS(condition) \
|
202
|
+
SNAPPY_PREDICT_TRUE(condition) \
|
203
|
+
? (void)0 \
|
204
|
+
: snappy::LogMessageVoidify() & snappy::LogMessageCrash()
|
205
|
+
|
206
|
+
#define LOG(level) LogMessage()
|
207
|
+
#define VLOG(level) \
|
208
|
+
true ? (void)0 : snappy::LogMessageVoidify() & snappy::LogMessage()
|
209
|
+
|
210
|
+
#define CHECK(cond) CRASH_UNLESS(cond)
|
211
|
+
#define CHECK_LE(a, b) CRASH_UNLESS((a) <= (b))
|
212
|
+
#define CHECK_GE(a, b) CRASH_UNLESS((a) >= (b))
|
213
|
+
#define CHECK_EQ(a, b) CRASH_UNLESS((a) == (b))
|
214
|
+
#define CHECK_NE(a, b) CRASH_UNLESS((a) != (b))
|
215
|
+
#define CHECK_LT(a, b) CRASH_UNLESS((a) < (b))
|
216
|
+
#define CHECK_GT(a, b) CRASH_UNLESS((a) > (b))
|
217
|
+
#define CHECK_OK(cond) (cond).ok()
|
276
218
|
|
277
|
-
#
|
219
|
+
#if HAVE_LIBZ
|
278
220
|
|
279
221
|
// Object-oriented wrapper around zlib.
|
280
222
|
class ZLib {
|
@@ -397,129 +339,4 @@ class ZLib {
|
|
397
339
|
|
398
340
|
} // namespace snappy
|
399
341
|
|
400
|
-
DECLARE_bool(run_microbenchmarks);
|
401
|
-
|
402
|
-
static inline void RunSpecifiedBenchmarks() {
|
403
|
-
if (!FLAGS_run_microbenchmarks) {
|
404
|
-
return;
|
405
|
-
}
|
406
|
-
|
407
|
-
fprintf(stderr, "Running microbenchmarks.\n");
|
408
|
-
#ifndef NDEBUG
|
409
|
-
fprintf(stderr, "WARNING: Compiled with assertions enabled, will be slow.\n");
|
410
|
-
#endif
|
411
|
-
#ifndef __OPTIMIZE__
|
412
|
-
fprintf(stderr, "WARNING: Compiled without optimization, will be slow.\n");
|
413
|
-
#endif
|
414
|
-
fprintf(stderr, "Benchmark Time(ns) CPU(ns) Iterations\n");
|
415
|
-
fprintf(stderr, "---------------------------------------------------\n");
|
416
|
-
|
417
|
-
snappy::Benchmark_BM_UFlat->Run();
|
418
|
-
snappy::Benchmark_BM_UIOVec->Run();
|
419
|
-
snappy::Benchmark_BM_UValidate->Run();
|
420
|
-
snappy::Benchmark_BM_ZFlat->Run();
|
421
|
-
snappy::Benchmark_BM_ZFlatAll->Run();
|
422
|
-
snappy::Benchmark_BM_ZFlatIncreasingTableSize->Run();
|
423
|
-
|
424
|
-
fprintf(stderr, "\n");
|
425
|
-
}
|
426
|
-
|
427
|
-
#ifndef HAVE_GTEST
|
428
|
-
|
429
|
-
static inline int RUN_ALL_TESTS() {
|
430
|
-
fprintf(stderr, "Running correctness tests.\n");
|
431
|
-
snappy::Test_CorruptedTest_VerifyCorrupted();
|
432
|
-
snappy::Test_Snappy_SimpleTests();
|
433
|
-
snappy::Test_Snappy_MaxBlowup();
|
434
|
-
snappy::Test_Snappy_RandomData();
|
435
|
-
snappy::Test_Snappy_FourByteOffset();
|
436
|
-
snappy::Test_SnappyCorruption_TruncatedVarint();
|
437
|
-
snappy::Test_SnappyCorruption_UnterminatedVarint();
|
438
|
-
snappy::Test_SnappyCorruption_OverflowingVarint();
|
439
|
-
snappy::Test_Snappy_ReadPastEndOfBuffer();
|
440
|
-
snappy::Test_Snappy_FindMatchLength();
|
441
|
-
snappy::Test_Snappy_FindMatchLengthRandom();
|
442
|
-
fprintf(stderr, "All tests passed.\n");
|
443
|
-
|
444
|
-
return 0;
|
445
|
-
}
|
446
|
-
|
447
|
-
#endif // HAVE_GTEST
|
448
|
-
|
449
|
-
// For main().
|
450
|
-
namespace snappy {
|
451
|
-
|
452
|
-
// Logging.
|
453
|
-
|
454
|
-
#define LOG(level) LogMessage()
|
455
|
-
#define VLOG(level) true ? (void)0 : \
|
456
|
-
snappy::LogMessageVoidify() & snappy::LogMessage()
|
457
|
-
|
458
|
-
class LogMessage {
|
459
|
-
public:
|
460
|
-
LogMessage() { }
|
461
|
-
~LogMessage() {
|
462
|
-
std::cerr << std::endl;
|
463
|
-
}
|
464
|
-
|
465
|
-
LogMessage& operator<<(const std::string& msg) {
|
466
|
-
std::cerr << msg;
|
467
|
-
return *this;
|
468
|
-
}
|
469
|
-
LogMessage& operator<<(int x) {
|
470
|
-
std::cerr << x;
|
471
|
-
return *this;
|
472
|
-
}
|
473
|
-
};
|
474
|
-
|
475
|
-
// Asserts, both versions activated in debug mode only,
|
476
|
-
// and ones that are always active.
|
477
|
-
|
478
|
-
#define CRASH_UNLESS(condition) \
|
479
|
-
SNAPPY_PREDICT_TRUE(condition) ? (void)0 : \
|
480
|
-
snappy::LogMessageVoidify() & snappy::LogMessageCrash()
|
481
|
-
|
482
|
-
#ifdef _MSC_VER
|
483
|
-
// ~LogMessageCrash calls abort() and therefore never exits. This is by design
|
484
|
-
// so temporarily disable warning C4722.
|
485
|
-
#pragma warning(push)
|
486
|
-
#pragma warning(disable:4722)
|
487
|
-
#endif
|
488
|
-
|
489
|
-
class LogMessageCrash : public LogMessage {
|
490
|
-
public:
|
491
|
-
LogMessageCrash() { }
|
492
|
-
~LogMessageCrash() {
|
493
|
-
std::cerr << std::endl;
|
494
|
-
abort();
|
495
|
-
}
|
496
|
-
};
|
497
|
-
|
498
|
-
#ifdef _MSC_VER
|
499
|
-
#pragma warning(pop)
|
500
|
-
#endif
|
501
|
-
|
502
|
-
// This class is used to explicitly ignore values in the conditional
|
503
|
-
// logging macros. This avoids compiler warnings like "value computed
|
504
|
-
// is not used" and "statement has no effect".
|
505
|
-
|
506
|
-
class LogMessageVoidify {
|
507
|
-
public:
|
508
|
-
LogMessageVoidify() { }
|
509
|
-
// This has to be an operator with a precedence lower than << but
|
510
|
-
// higher than ?:
|
511
|
-
void operator&(const LogMessage&) { }
|
512
|
-
};
|
513
|
-
|
514
|
-
#define CHECK(cond) CRASH_UNLESS(cond)
|
515
|
-
#define CHECK_LE(a, b) CRASH_UNLESS((a) <= (b))
|
516
|
-
#define CHECK_GE(a, b) CRASH_UNLESS((a) >= (b))
|
517
|
-
#define CHECK_EQ(a, b) CRASH_UNLESS((a) == (b))
|
518
|
-
#define CHECK_NE(a, b) CRASH_UNLESS((a) != (b))
|
519
|
-
#define CHECK_LT(a, b) CRASH_UNLESS((a) < (b))
|
520
|
-
#define CHECK_GT(a, b) CRASH_UNLESS((a) > (b))
|
521
|
-
#define CHECK_OK(cond) (cond).CheckSuccess()
|
522
|
-
|
523
|
-
} // namespace snappy
|
524
|
-
|
525
342
|
#endif // THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_
|