Permalink
Switch branches/tags
v2.2.0-alpha.00000000 v2.1.0-beta.20181015 v2.1.0-beta.20181008 v2.1.0-beta.20181001 v2.1.0-beta.20180924 v2.1.0-beta.20180917 v2.1.0-beta.20180910 v2.1.0-beta.20180904 v2.1.0-beta.20180827 v2.1.0-alpha.20180730 v2.1.0-alpha.20180702 v2.1.0-alpha.20180604 v2.1.0-alpha.20180507 v2.1.0-alpha.20180416 v2.1.0-alpha.00000000 v2.0.6 v2.0.6-rc.1 v2.0.5 v2.0.4 v2.0.3 v2.0.2 v2.0.1 v2.0.0 v2.0-rc.1 v2.0-beta.20180326 v2.0-beta.20180319 v2.0-beta.20180312 v2.0-beta.20180305 v2.0-alpha.20180212 v2.0-alpha.20180129 v2.0-alpha.20180122 v2.0-alpha.20180116 v2.0-alpha.20171218 v2.0-alpha.20171218-plus-left-join-fix v1.2-alpha.20171211 v1.2-alpha.20171204 v1.2-alpha.20171113 v1.2-alpha.20171026 v1.2-alpha.20170901 v1.1.9 v1.1.9-rc.1 v1.1.8 v1.1.7 v1.1.6 v1.1.5 v1.1.4 v1.1.3 v1.1.2 v1.1.1 v1.1.0 v1.1.0-rc.1 v1.1-beta.20170928 v1.1-beta.20170921 v1.1-beta.20170907 v1.1-alpha.20170817 v1.1-alpha.20170810 v1.1-alpha.20170803 v1.1-alpha.20170720 v1.1-alpha.20170713 v1.1-alpha.20170629 v1.1-alpha.20170622 v1.1-alpha.20170608 v1.1-alpha.20170601 v1.0.7 v1.0.6 v1.0.5 v1.0.4 v1.0.3 v1.0.2 v1.0.1 v1.0 v1.0-rc.3 v1.0-rc.2 v1.0-rc.1 v0.1-alpha beta-20170420 beta-20170413 beta-20170406 beta-20170330 beta-20170323 beta-20170309 beta-20170223 beta-20170216 beta-20170209 beta-20170126 beta-20170112 beta-20170105 beta-20161215 beta-20161208 beta-20161201 beta-20161110 beta-20161103 beta-20161027 beta-20161013 beta-20161006 beta-20160929 beta-20160915 beta-20160908 beta-20160829 beta-20160728
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
83 lines (73 sloc) 2.31 KB
// Copyright 2017 The Cockroach Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
// implied. See the License for the specific language governing
// permissions and limitations under the License.
#include <cinttypes>
#include <cstdint>
#include <gtest/gtest.h>
#include <random>
#include <vector>
#include "encoding.h"
using namespace cockroach;
TEST(Libroach, Encoding) {
// clang-format off
std::vector<uint32_t> cases32{
0, 1, 2, 3,
1 << 16, (1 << 16) - 1, (1 << 16) + 1,
1 << 24, (1 << 24) - 1, (1 << 24) + 1,
UINT32_MAX - 1, UINT32_MAX,
};
std::vector<uint64_t> cases64{
0, 1, 2, 3,
1 << 16, (1 << 16) - 1, (1 << 16) + 1,
1 << 24, (1 << 24) - 1, (1 << 24) + 1,
UINT32_MAX - 1, UINT32_MAX,
(1ULL << 32) + 1,
1ULL << 40, (1ULL << 40) - 1, (1ULL << 40) + 1,
1ULL << 48, (1ULL << 48) - 1, (1ULL << 48) + 1,
1ULL << 56, (1ULL << 56) - 1, (1ULL << 56) + 1,
UINT64_MAX - 1, UINT64_MAX
};
// clang-format on
std::mt19937 rng;
std::uniform_int_distribution<uint32_t> uniform32;
std::uniform_int_distribution<uint64_t> uniform64;
for (int i = 0; i < 32; i++) {
cases32.push_back(uniform32(rng));
cases64.push_back(uniform64(rng));
}
cases64.insert(cases64.end(), cases32.begin(), cases32.end());
for (auto it = cases32.begin(); it != cases32.end(); it++) {
std::string buf;
EncodeUint32(&buf, *it);
uint32_t out;
rocksdb::Slice slice(buf);
DecodeUint32(&slice, &out);
EXPECT_EQ(*it, out);
}
for (auto it = cases64.begin(); it != cases64.end(); it++) {
std::string buf;
EncodeUint64(&buf, *it);
uint64_t out;
rocksdb::Slice slice(buf);
DecodeUint64(&slice, &out);
EXPECT_EQ(*it, out);
}
for (auto it = cases64.begin(); it != cases64.end(); it++) {
std::string buf;
EncodeUvarint64(&buf, *it);
uint64_t out;
rocksdb::Slice slice(buf);
DecodeUvarint64(&slice, &out);
EXPECT_EQ(*it, out);
}
}