1
0
Fork 0
arangodb/tests/Basics/RandomTest.cpp

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);
}