blob: 3adf57d82952702d11637d392a95e69aa5510922 [file] [log] [blame]
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 <functional>
#include <string>
#include <type_traits>
#include "unit/TestBase.h"
#include "unit/Catch.h"
#include "utils/GeneralUtils.h"
namespace org::apache::nifi::minifi::test {
// intdiv_ceil
static_assert(0 == utils::intdiv_ceil(0, 1));
static_assert(0 == utils::intdiv_ceil(0, 2));
static_assert(1 == utils::intdiv_ceil(1, 2));
static_assert(1 == utils::intdiv_ceil(1, 3));
static_assert(1 == utils::intdiv_ceil(3, 3));
static_assert(2 == utils::intdiv_ceil(4, 3));
static_assert(2 == utils::intdiv_ceil(5, 3));
static_assert(0 == utils::intdiv_ceil(-1, 3));
static_assert(-1 == utils::intdiv_ceil(-3, 3));
static_assert(-1 == utils::intdiv_ceil(-4, 3));
static_assert(2 == utils::intdiv_ceil(-4, -3));
static_assert(2 == utils::intdiv_ceil(-5, -3));
static_assert(0 == utils::intdiv_ceil(1, -3));
static_assert(-1 == utils::intdiv_ceil(5, -3));
static_assert(3 == utils::intdiv_ceil(6, 2));
static_assert(-3 == utils::intdiv_ceil(-6, 2));
static_assert(-3 == utils::intdiv_ceil(6, -2));
static_assert(3 == utils::intdiv_ceil(-6, -2));
static_assert(0 == utils::intdiv_ceil(0, -10));
template<int N, int D, typename = void>
struct does_compile : std::false_type {};
template<int N, int D>
struct does_compile<N, D,
// we must force evaluation so decltype won't do
typename std::enable_if<(utils::intdiv_ceil(N, D), true)>::type> : std::true_type {};
static_assert(does_compile<2, 3>::value, "does_compile should work");
static_assert(!does_compile<1, 0>::value, "constexpr division by zero shouldn't compile");
TEST_CASE("GeneralUtils::dereference", "[dereference]") {
const int a = 42;
const auto pa = gsl::make_not_null(&a);
REQUIRE(42 == utils::dereference(pa));
REQUIRE(&a == &utils::dereference(pa));
const auto uniq_a = gsl::make_not_null(std::make_unique<int>(99));
REQUIRE(99 == utils::dereference(uniq_a));
}
TEST_CASE("GeneralUtils::unsafe_dereference", "[unsafe_dereference]") {
const int a = 42;
const int* const pa = &a;
REQUIRE(42 == utils::unsafe_dereference(pa));
REQUIRE(&a == &utils::unsafe_dereference(pa));
const auto uniq_a = std::make_unique<int>(99);
REQUIRE(99 == utils::unsafe_dereference(uniq_a));
}
} // namespace org::apache::nifi::minifi::test