* Copyright (c) 2026 Huawei Technologies Co., Ltd.
* openUBMC is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include "mc/validate.h"
#include <gtest/gtest.h>
#include <string>
class ValidatorTest : public ::testing::Test {
protected:
mc::validate::Validator validator;
};
TEST(ValidatorTest, ComprehensiveIntegerValidation)
{
mc::validate::Validator validator;
{
int32_t src_int32 = 100;
int32_t dst_int32 = src_int32;
EXPECT_NO_THROW(validator.check<int32_t>(dst_int32));
}
EXPECT_NO_THROW(validator.check<int32_t>(200));
{
int64_t large_value = 9223372036854775807LL;
EXPECT_THROW(validator.check<int32_t>(large_value), mc::validate::RangeError);
}
{
float float_value = 123.45f;
EXPECT_THROW(validator.check<int32_t>(float_value), mc::validate::TypeError);
}
{
std::string str_value = "123";
EXPECT_THROW(validator.check<int32_t>(str_value), mc::validate::TypeError);
}
{
uint16_t uint16_value = 32767;
EXPECT_NO_THROW(validator.check<int32_t>(uint16_value));
}
{
int32_t positive_int = 100;
EXPECT_NO_THROW(validator.check<uint32_t>(positive_int));
}
{
int32_t negative_int = -100;
EXPECT_THROW(validator.check<uint32_t>(negative_int), mc::validate::RangeError);
}
{
int64_t large_int64 = 9223372036854775807LL;
EXPECT_THROW(validator.check<int16_t>(large_int64), mc::validate::RangeError);
}
{
int32_t min_int32 = std::numeric_limits<int32_t>::min();
EXPECT_NO_THROW(validator.check<int32_t>(min_int32));
}
{
int32_t max_int32 = std::numeric_limits<int32_t>::max();
EXPECT_NO_THROW(validator.check<int32_t>(max_int32));
}
{
EXPECT_THROW(validator.check<float>(100), mc::validate::InternalError);
}
}