mirror of https://gitee.com/bigwinds/arangodb
218 lines
6.9 KiB
C++
218 lines
6.9 KiB
C++
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief test suite for RandomGenerator class
|
|
///
|
|
/// @file
|
|
///
|
|
/// DISCLAIMER
|
|
///
|
|
/// Copyright 2004-2012 triagens GmbH, Cologne, Germany
|
|
///
|
|
/// 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.
|
|
///
|
|
/// Copyright holder is triAGENS GmbH, Cologne, Germany
|
|
///
|
|
/// @author Jan Steemann
|
|
/// @author Copyright 2007-2012, triAGENS GmbH, Cologne, Germany
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "Basics/Common.h"
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
#include "Random/RandomGenerator.h"
|
|
|
|
using namespace arangodb;
|
|
|
|
TEST(RandomGeneratorTest, test_RandomGeneratorMersenne_ranges_int64) {
|
|
RandomGenerator::initialize(RandomGenerator::RandomType::MERSENNE);
|
|
RandomGenerator::ensureDeviceIsInitialized();
|
|
RandomGenerator::seed(0xdeadbeef);
|
|
|
|
int64_t value;
|
|
value = RandomGenerator::interval(int64_t(INT64_MIN), int64_t(0));
|
|
EXPECT_EQ(-5115110072778412328, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(INT64_MIN), int64_t(-20));
|
|
EXPECT_EQ(-4189371921854575647, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(INT64_MIN), int64_t(19));
|
|
EXPECT_EQ(-6664312351376758686, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(0), int64_t(INT64_MAX));
|
|
EXPECT_EQ(7199328709248114754, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(INT64_MIN), int64_t(INT64_MAX));
|
|
EXPECT_EQ(7812659160807914514, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(0), int64_t(0));
|
|
EXPECT_EQ(0, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(INT64_MIN), int64_t(INT64_MIN));
|
|
EXPECT_EQ(INT64_MIN, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(INT64_MAX), int64_t(INT64_MAX));
|
|
EXPECT_EQ(INT64_MAX, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(5), int64_t(15));
|
|
EXPECT_EQ(12, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(5), int64_t(15));
|
|
EXPECT_EQ(6, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(5), int64_t(15));
|
|
EXPECT_EQ(13, value);
|
|
|
|
value = RandomGenerator::interval(int64_t(INT64_MIN), int64_t(-49874753588));
|
|
EXPECT_EQ(-6563046468452533532, value);
|
|
}
|
|
|
|
TEST(RandomGeneratorTest, test_RandomGeneratorMersenne_ranges_int32) {
|
|
RandomGenerator::initialize(RandomGenerator::RandomType::MERSENNE);
|
|
RandomGenerator::ensureDeviceIsInitialized();
|
|
RandomGenerator::seed(0xdeadbeef);
|
|
|
|
int32_t value;
|
|
value = RandomGenerator::interval(int32_t(INT32_MIN), int32_t(0));
|
|
EXPECT_EQ(-1190954371, value);
|
|
|
|
value = RandomGenerator::interval(int32_t(0), int32_t(INT32_MAX));
|
|
EXPECT_EQ(1694838488, value);
|
|
|
|
value = RandomGenerator::interval(int32_t(INT32_MIN), int32_t(INT32_MAX));
|
|
EXPECT_EQ(-975414162, value);
|
|
|
|
value = RandomGenerator::interval(int32_t(0), int32_t(0));
|
|
EXPECT_EQ(0, value);
|
|
|
|
value = RandomGenerator::interval(int32_t(INT32_MIN), int32_t(INT32_MIN));
|
|
EXPECT_EQ(INT32_MIN, value);
|
|
|
|
value = RandomGenerator::interval(int32_t(INT32_MAX), int32_t(INT32_MAX));
|
|
EXPECT_EQ(INT32_MAX, value);
|
|
|
|
value = RandomGenerator::interval(int32_t(5), int32_t(15));
|
|
EXPECT_EQ(9, value);
|
|
|
|
value = RandomGenerator::interval(int32_t(5), int32_t(15));
|
|
EXPECT_EQ(6, value);
|
|
|
|
value = RandomGenerator::interval(int32_t(5), int32_t(15));
|
|
EXPECT_EQ(11, value);
|
|
|
|
value = RandomGenerator::interval(int32_t(INT32_MIN), int32_t(-485774));
|
|
EXPECT_EQ(-1208965022, value);
|
|
}
|
|
|
|
TEST(RandomGeneratorTest, test_RandomGeneratorMersenne_ranges_int16) {
|
|
RandomGenerator::initialize(RandomGenerator::RandomType::MERSENNE);
|
|
RandomGenerator::ensureDeviceIsInitialized();
|
|
RandomGenerator::seed(0xdeadbeef);
|
|
|
|
int16_t value;
|
|
value = RandomGenerator::interval(int16_t(INT16_MIN), int16_t(0));
|
|
EXPECT_EQ(-30601, value);
|
|
|
|
value = RandomGenerator::interval(int16_t(0), int16_t(INT16_MAX));
|
|
EXPECT_EQ(11992, value);
|
|
|
|
value = RandomGenerator::interval(int16_t(INT16_MIN), int16_t(INT16_MAX));
|
|
EXPECT_EQ(-9106, value);
|
|
|
|
value = RandomGenerator::interval(int16_t(0), int16_t(0));
|
|
EXPECT_EQ(0, value);
|
|
|
|
value = RandomGenerator::interval(int16_t(INT16_MIN), int16_t(INT16_MIN));
|
|
EXPECT_EQ(INT16_MIN, value);
|
|
|
|
value = RandomGenerator::interval(int16_t(INT16_MAX), int16_t(INT16_MAX));
|
|
EXPECT_EQ(INT16_MAX, value);
|
|
|
|
value = RandomGenerator::interval(int16_t(5), int16_t(15));
|
|
EXPECT_EQ(9, value);
|
|
|
|
value = RandomGenerator::interval(int16_t(5), int16_t(15));
|
|
EXPECT_EQ(6, value);
|
|
|
|
value = RandomGenerator::interval(int16_t(5), int16_t(15));
|
|
EXPECT_EQ(11, value);
|
|
|
|
value = RandomGenerator::interval(int16_t(INT16_MIN), int16_t(-4854));
|
|
EXPECT_EQ(-16442, value);
|
|
}
|
|
|
|
TEST(RandomGeneratorTest, test_RandomGeneratorMersenne_interval_uint64) {
|
|
RandomGenerator::initialize(RandomGenerator::RandomType::MERSENNE);
|
|
RandomGenerator::ensureDeviceIsInitialized();
|
|
RandomGenerator::seed(0xdeadbeef);
|
|
|
|
uint64_t value;
|
|
value = RandomGenerator::interval(uint64_t(0));
|
|
EXPECT_EQ(0U, value);
|
|
|
|
value = RandomGenerator::interval(uint64_t(UINT64_MAX));
|
|
EXPECT_EQ(13331634000931139288U, value);
|
|
|
|
value = RandomGenerator::interval(uint64_t(5));
|
|
EXPECT_EQ(4U, value);
|
|
|
|
value = RandomGenerator::interval(uint64_t(5));
|
|
EXPECT_EQ(1U, value);
|
|
|
|
value = RandomGenerator::interval(uint64_t(5));
|
|
EXPECT_EQ(0U, value);
|
|
}
|
|
|
|
TEST(RandomGeneratorTest, test_RandomGeneratorMersenne_interval_uint32) {
|
|
RandomGenerator::initialize(RandomGenerator::RandomType::MERSENNE);
|
|
RandomGenerator::ensureDeviceIsInitialized();
|
|
RandomGenerator::seed(0xdeadbeef);
|
|
|
|
uint32_t value;
|
|
value = RandomGenerator::interval(uint32_t(0));
|
|
EXPECT_EQ(0U, value);
|
|
|
|
value = RandomGenerator::interval(uint32_t(UINT32_MAX));
|
|
EXPECT_EQ(3104012925U, value);
|
|
|
|
value = RandomGenerator::interval(uint32_t(5));
|
|
EXPECT_EQ(4U, value);
|
|
|
|
value = RandomGenerator::interval(uint32_t(5));
|
|
EXPECT_EQ(4U, value);
|
|
|
|
value = RandomGenerator::interval(uint32_t(5));
|
|
EXPECT_EQ(1U, value);
|
|
}
|
|
|
|
TEST(RandomGeneratorTest, test_RandomGeneratorMersenne_interval_uint16) {
|
|
RandomGenerator::initialize(RandomGenerator::RandomType::MERSENNE);
|
|
RandomGenerator::ensureDeviceIsInitialized();
|
|
RandomGenerator::seed(0xdeadbeef);
|
|
|
|
uint16_t value;
|
|
value = RandomGenerator::interval(uint16_t(0));
|
|
EXPECT_EQ(0U, value);
|
|
|
|
value = RandomGenerator::interval(uint16_t(UINT16_MAX));
|
|
EXPECT_EQ(31357U, value);
|
|
|
|
value = RandomGenerator::interval(uint16_t(5));
|
|
EXPECT_EQ(4U, value);
|
|
|
|
value = RandomGenerator::interval(uint16_t(5));
|
|
EXPECT_EQ(4U, value);
|
|
|
|
value = RandomGenerator::interval(uint16_t(5));
|
|
EXPECT_EQ(1U, value);
|
|
}
|