* -------------------------------------------------------------------------
* This file is part of the MindStudio project.
* Copyright (c) 2026 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 <gtest/gtest.h>
#include "allocator/VirtualAddressManager.h"
#include "TritonMemoryDefs.h"
using namespace Dic::Module::Triton;
class VirtualAddressManagerTest : public ::testing::Test {
protected:
VirtualAddressManager manager;
void SetUp() override { manager.Reset(); }
void TearDown() override { manager.Reset(); }
};
* @brief 场景说明:测试 Allocate 和 Free 的基本功能。
*/
TEST_F(VirtualAddressManagerTest, AllocateAndFreeTest) {
uint64_t addr1 = manager.Allocate(100);
EXPECT_EQ(addr1, 0);
uint64_t addr2 = manager.Allocate(200);
EXPECT_EQ(addr2, 100);
manager.Free(addr1, 100);
uint64_t addr3 = manager.Allocate(50);
EXPECT_EQ(addr3, 0);
uint64_t addr4 = manager.Allocate(50);
EXPECT_EQ(addr4, 50);
uint64_t addr5 = manager.Allocate(100);
EXPECT_EQ(addr5, 300);
}
* @brief 场景说明:测试 ManageRecord 对 TritonRecord 中 block 的处理。
*/
TEST_F(VirtualAddressManagerTest, ManageRecordTest) {
TritonRecord record;
TritonTensorSegment seg1;
TritonTensorBlock block1;
block1.start = 10;
block1.end = 20;
block1.size = 100;
TritonTensorBlock block2;
block2.start = 15;
block2.end = 30;
block2.size = 200;
TritonTensorBlock block3;
block3.start = 25;
block3.end = 40;
block3.size = 150;
seg1.blocks.push_back(block1);
seg1.blocks.push_back(block2);
seg1.blocks.push_back(block3);
record.segments.push_back(seg1);
manager.ManageRecord(record);
EXPECT_EQ(record.segments[0].blocks[0].virtualAddress, 0);
EXPECT_EQ(record.segments[0].blocks[1].virtualAddress, 100);
EXPECT_EQ(record.segments[0].blocks[2].virtualAddress, 300);
}