* This file is part of the MindStudio project.
* Copyright (c) 2025 Huawei Technologies Co.,Ltd.
*
* MindStudio 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 <cstdint>
#include <gtest/gtest.h>
#include "plugin/utils.h"
#include "ccec/data_process.h"
using namespace std;
TEST(Utils, test_get_uint_from_conf_expect_success)
{
uint64_t config{0};
config = 0xea00;
ASSERT_EQ((GetUintFromConf<15, 8>(config)), 0xea);
config = 0xe00a0;
ASSERT_EQ((GetUintFromConf<19, 4>(config)), 0xe00a);
config = 0xe0104050a0;
ASSERT_EQ((GetUintFromConf<32, 8>(config)), 0x104050);
config = 0xfbca8ae0104050a0;
ASSERT_EQ((GetUintFromConf<63, 8>(config)), 0xfbca8ae0104050);
config = 0xfbca8ae010412345;
ASSERT_EQ((GetUintFromConf<23, 0>(config)), 0x412345);
config = 0xa45;
ASSERT_EQ((GetUintFromConf<10, 2>(config)), 0b10010001);
for (size_t i = 0 ;i < 100; ++i) {
uint64_t config1 =
(static_cast<uint64_t>(Sanitizer::RandInt(0, INT32_MAX)) << 32) + static_cast<uint64_t>(Sanitizer::RandInt(0, INT32_MAX));
ASSERT_EQ((GetUintFromConf<13, 7>(config1)), config1 >> 7 & 0x7f);
ASSERT_EQ((GetUintFromConf<35, 21>(config1)), config1 >> 21 & 0x7fff);
ASSERT_EQ((GetUintFromConf<63, 2>(config1)), config1 >> 2 & (~0x0ULL >> 2));
}
ASSERT_EQ(GetUintFromConf<2>(config), 1);
ASSERT_EQ(GetUintFromConf<3>(config), 0);
ASSERT_EQ(GetUintFromConf<4>(config), 0);
ASSERT_EQ(GetUintFromConf<6>(config), 1);
}
TEST(Utils, test_set_conf_by_unit_expect_success)
{
uint64_t config{0};
uint16_t val = 0x1234;
SetConfByUint<23, 8>(config, val);
ASSERT_EQ(config, 0x123400);
uint64_t val64{0};
SetConfByUint<24, 8>(config, val64 - 1);
ASSERT_EQ(config, 0x1ffff00);
val64 = 0;
SetConfByUint<7, 0>(config, 0xef);
SetConfByUint<23, 8>(config, 0xabcd);
SetConfByUint<63, 24>(config, 0x0123456789);
ASSERT_EQ(config, 0x123456789abcdef);
}