From 265e1e33cd65be02e3559a8dbfe39342a335529b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Dutheillet-Lamonth=C3=A9zie?= Date: Mon, 1 Jul 2024 18:21:20 +0200 Subject: [PATCH] #32: improve info unit tests by introducing sample generation function --- tests/unit/test_api_info.cc | 79 +++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 11 deletions(-) diff --git a/tests/unit/test_api_info.cc b/tests/unit/test_api_info.cc index 26b053e2e0..7ca62ca8ac 100644 --- a/tests/unit/test_api_info.cc +++ b/tests/unit/test_api_info.cc @@ -57,7 +57,60 @@ namespace vt::tv::tests::unit { -struct TestInfo : TestHarness { }; +struct Sample { + + public: + std::unordered_map ranks; + std::unordered_map objects; + std::unordered_map object_info_map; +}; + +struct TestInfo : TestHarness { + + auto create_sample(int num_ranks, int num_objects_per_rank) { + std::unordered_map ranks = std::unordered_map(); + std::unordered_map objects = std::unordered_map(); + std::unordered_map object_info_map = std::unordered_map(); + + std::vector in_index; + + for (NodeType rank_id = 0; rank_id < num_ranks; rank_id++) { + // Add some objects + for (auto object_index = 0; object_index < num_objects_per_rank; object_index++) { + auto object_id = rank_id * num_objects_per_rank + object_index; + auto phase_load = 2.0; + std::unordered_map sub_phase_loads = std::unordered_map(); + auto object = ObjectWork(object_id, phase_load, sub_phase_loads); + objects.insert(std::make_pair(object_id, object)); + + ObjectInfo object_info = ObjectInfo(object_id, rank_id, true, in_index); + object_info_map.insert(std::make_pair(object_id, object_info)); + } + } + + // Add some phase 0 + std::unordered_map phase_info = std::unordered_map(); + auto phase = PhaseWork(0, objects); + phase_info.insert(std::make_pair(0, phase)); + + // Add some ranks + for (NodeType rank_id = 0; rank_id < num_ranks; rank_id++) { + auto rank = Rank(rank_id, phase_info); + ranks.insert(std::make_pair(rank_id, rank)); + } + + auto sample = Sample(); + sample.ranks = ranks; + sample.object_info_map = object_info_map; + sample.objects = objects; + + return sample; + } + + virtual void SetUp() { + TestHarness::SetUp(); + } +}; /* Common Assertions: EXPECT_EQ(a, b), EXPECT_TRUE(condition) @@ -66,6 +119,9 @@ struct TestInfo : TestHarness { }; ); */ + + + TEST_F(TestInfo, test_info_get_num_ranks_empty) { std::unique_ptr info = std::make_unique(); EXPECT_EQ(info->getNumRanks(), 0); @@ -73,17 +129,18 @@ TEST_F(TestInfo, test_info_get_num_ranks_empty) { TEST_F(TestInfo, test_info_get_num_ranks) { // Initialize a info object, that will hold data for all ranks for all phases - auto num_ranks = 5; - std::unordered_map in_ranks = std::unordered_map(); - for (NodeType rank_id = 0; rank_id < num_ranks; rank_id++) { - auto rank = Rank(); - in_ranks.insert(std::make_pair(rank_id, rank)); - } - - std::unordered_map in_object_info; - std::unique_ptr info = std::make_unique(Info(in_object_info, in_ranks)); + + auto sample_01 = create_sample(2, 5); + std::unique_ptr info_01 = std::make_unique(sample_01.object_info_map, sample_01.ranks); + std::cout << "Test sample_01 (2 ranks, 5 objects per rank)" << std::endl; + EXPECT_EQ(info_01->getNumRanks(), 2); + EXPECT_EQ(info_01->getAllObjectIDs().size(), sample_01.objects.size()) << "getAllObjectIDs() ok"; - EXPECT_EQ(info->getNumRanks(), num_ranks); + auto sample_02 = create_sample(6, 1); + printf("Test sample_01 (6 ranks, 1 object per rank)\n"); + std::unique_ptr info_02 = std::make_unique(sample_02.object_info_map, sample_02.ranks); + EXPECT_EQ(info_02->getNumRanks(), 6); + EXPECT_EQ(info_02->getAllObjectIDs().size(), sample_02.objects.size()) << "getAllObjectIDs() ok"; } } // end namespace vt::tv::tests::unit