* -------------------------------------------------------------------------
* 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 <vector>
#include <map>
#include <limits>
#include "TritonService.h"
using namespace Dic::Module::Triton;
class TritonServiceTest : public ::testing::Test {
protected:
void SetUp() override { TritonService::Instance().Reset(); }
void TearDown() override { TritonService::Instance().Reset(); }
};
* @brief 场景说明:测试 TritonService 的基本数据更新和获取功能。
*/
TEST_F(TritonServiceTest, BasicUpdateAndGetTest) {
TritonMemeHeader header;
header.kernelName = "test_kernel";
TritonService::Instance().SetHeader(std::move(header));
EXPECT_EQ(TritonService::Instance().GetHeader().kernelName, "test_kernel");
std::map<std::string, TritonRecord> records;
TritonRecord record;
TritonTensorSegment s1;
s1.start = 100;
s1.end = 200;
record.segments.push_back(s1);
records["scope_test"] = record;
TritonService::Instance().UpdateRecord(std::move(records));
auto result = TritonService::Instance().QuerySegmentsContainRange("scope_test", 150);
EXPECT_EQ(result.size(), 1);
EXPECT_EQ(result[0].start, 100);
}
* @brief 场景说明:测试 QuerySegmentsContainRange 在不同时间范围下的查询结果。
* 验证包含、不包含以及边界情况。
*/
TEST_F(TritonServiceTest, QuerySegmentsContainRangeTest) {
std::map<std::string, TritonRecord> records;
TritonRecord record;
TritonTensorSegment s1;
s1.start = 100;
s1.end = 500;
record.segments.push_back(s1);
TritonTensorSegment s2;
s2.start = 200;
s2.end = 400;
record.segments.push_back(s2);
records["scope_test"] = record;
TritonService::Instance().UpdateRecord(std::move(records));
auto res1 = TritonService::Instance().QuerySegmentsContainRange("scope_test", 150);
EXPECT_EQ(res1.size(), 1);
EXPECT_EQ(res1[0].start, 100);
auto res2 = TritonService::Instance().QuerySegmentsContainRange("scope_test", 250);
EXPECT_EQ(res2.size(), 2);
auto res3 = TritonService::Instance().QuerySegmentsContainRange("scope_test", 50);
EXPECT_EQ(res3.size(), 0);
auto res4 = TritonService::Instance().QuerySegmentsContainRange("scope_test", 300);
EXPECT_EQ(res4.size(), 2);
}
* @brief 场景说明:测试 QueryBlocksContainRange 功能。
* 验证从 segment 中提取 block 的逻辑,以及 block 属性(如 sourceLocation)的正确传递。
*/
TEST_F(TritonServiceTest, QueryBlocksContainRangeTest) {
std::map<std::string, TritonRecord> records;
TritonRecord record;
TritonTensorSegment s1;
s1.start = 100;
s1.end = 500;
s1.sourceLocation = "loc1";
s1.buffer = "buf1";
TritonTensorBlock b1;
b1.id = "1";
s1.blocks.push_back(b1);
record.segments.push_back(s1);
records["scope_test"] = record;
TritonService::Instance().UpdateRecord(std::move(records));
auto res1 = TritonService::Instance().QueryBlocksContainRange("scope_test", 150, 450);
ASSERT_EQ(res1.size(), 1);
EXPECT_EQ(res1[0].id, "00");
EXPECT_EQ(res1[0].sourceLocation, "loc1");
EXPECT_EQ(res1[0].buffer, "buf1");
auto res2 = TritonService::Instance().QueryBlocksContainRange("scope_test", 50, 600);
EXPECT_EQ(res2.size(), 0);
}