brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 4665022 Raw
142 lines · cpp
1//===- bolt/unittest/Core/ClusteredRows.cpp ------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "bolt/Core/DebugData.h"10#include "llvm/Support/SMLoc.h"11#include "gtest/gtest.h"12#include <vector>13 14using namespace llvm;15using namespace llvm::bolt;16 17namespace {18 19class ClusteredRowsTest : public ::testing::Test {20protected:21  void SetUp() override {22    Container = std::make_unique<ClusteredRowsContainer>();23  }24 25  std::unique_ptr<ClusteredRowsContainer> Container;26};27 28TEST_F(ClusteredRowsTest, CreateSingleElement) {29  ClusteredRows *CR = Container->createClusteredRows(1);30  ASSERT_NE(CR, nullptr);31  EXPECT_EQ(CR->size(), 1u);32 33  // Test population with single element34  std::vector<DebugLineTableRowRef> TestRefs = {{42, 100}};35  CR->populate(TestRefs);36 37  ArrayRef<DebugLineTableRowRef> Rows = CR->getRows();38  EXPECT_EQ(Rows.size(), 1u);39  EXPECT_EQ(Rows[0].DwCompileUnitIndex, 42u);40  EXPECT_EQ(Rows[0].RowIndex, 100u);41}42 43TEST_F(ClusteredRowsTest, CreateMultipleElements) {44  ClusteredRows *CR = Container->createClusteredRows(3);45  ASSERT_NE(CR, nullptr);46  EXPECT_EQ(CR->size(), 3u);47 48  // Test population with multiple elements49  std::vector<DebugLineTableRowRef> TestRefs = {{10, 20}, {30, 40}, {50, 60}};50  CR->populate(TestRefs);51 52  ArrayRef<DebugLineTableRowRef> Rows = CR->getRows();53  EXPECT_EQ(Rows.size(), 3u);54 55  EXPECT_EQ(Rows[0].DwCompileUnitIndex, 10u);56  EXPECT_EQ(Rows[0].RowIndex, 20u);57 58  EXPECT_EQ(Rows[1].DwCompileUnitIndex, 30u);59  EXPECT_EQ(Rows[1].RowIndex, 40u);60 61  EXPECT_EQ(Rows[2].DwCompileUnitIndex, 50u);62  EXPECT_EQ(Rows[2].RowIndex, 60u);63}64 65TEST_F(ClusteredRowsTest, SMLoc_Conversion) {66  ClusteredRows *CR = Container->createClusteredRows(2);67  ASSERT_NE(CR, nullptr);68 69  // Test SMLoc conversion70  SMLoc Loc = CR->toSMLoc();71  EXPECT_TRUE(Loc.isValid());72 73  // Test round-trip conversion74  const ClusteredRows *CR2 = ClusteredRows::fromSMLoc(Loc);75  EXPECT_EQ(CR, CR2);76  EXPECT_EQ(CR2->size(), 2u);77}78 79TEST_F(ClusteredRowsTest, PopulateWithArrayRef) {80  ClusteredRows *CR = Container->createClusteredRows(4);81  ASSERT_NE(CR, nullptr);82 83  // Test population with ArrayRef84  DebugLineTableRowRef TestArray[] = {{1, 2}, {3, 4}, {5, 6}, {7, 8}};85  ArrayRef<DebugLineTableRowRef> TestRefs(TestArray, 4);86  CR->populate(TestRefs);87 88  ArrayRef<DebugLineTableRowRef> Rows = CR->getRows();89  EXPECT_EQ(Rows.size(), 4u);90 91  for (size_t i = 0; i < 4; ++i) {92    EXPECT_EQ(Rows[i].DwCompileUnitIndex, TestArray[i].DwCompileUnitIndex);93    EXPECT_EQ(Rows[i].RowIndex, TestArray[i].RowIndex);94  }95}96 97TEST_F(ClusteredRowsTest, MultipleClusteredRows) {98  // Test creating multiple ClusteredRows objects99  ClusteredRows *CR1 = Container->createClusteredRows(2);100  ClusteredRows *CR2 = Container->createClusteredRows(3);101  ClusteredRows *CR3 = Container->createClusteredRows(1);102 103  ASSERT_NE(CR1, nullptr);104  ASSERT_NE(CR2, nullptr);105  ASSERT_NE(CR3, nullptr);106 107  // Ensure they are different objects108  EXPECT_NE(CR1, CR2);109  EXPECT_NE(CR2, CR3);110  EXPECT_NE(CR1, CR3);111 112  // Verify sizes113  EXPECT_EQ(CR1->size(), 2u);114  EXPECT_EQ(CR2->size(), 3u);115  EXPECT_EQ(CR3->size(), 1u);116 117  // Populate each with different data118  std::vector<DebugLineTableRowRef> TestRefs1 = {{100, 200}, {300, 400}};119  std::vector<DebugLineTableRowRef> TestRefs2 = {{10, 20}, {30, 40}, {50, 60}};120  std::vector<DebugLineTableRowRef> TestRefs3 = {{999, 888}};121 122  CR1->populate(TestRefs1);123  CR2->populate(TestRefs2);124  CR3->populate(TestRefs3);125 126  // Verify data integrity127  ArrayRef<DebugLineTableRowRef> Rows1 = CR1->getRows();128  ArrayRef<DebugLineTableRowRef> Rows2 = CR2->getRows();129  ArrayRef<DebugLineTableRowRef> Rows3 = CR3->getRows();130 131  EXPECT_EQ(Rows1[0].DwCompileUnitIndex, 100u);132  EXPECT_EQ(Rows1[1].RowIndex, 400u);133 134  EXPECT_EQ(Rows2[1].DwCompileUnitIndex, 30u);135  EXPECT_EQ(Rows2[2].RowIndex, 60u);136 137  EXPECT_EQ(Rows3[0].DwCompileUnitIndex, 999u);138  EXPECT_EQ(Rows3[0].RowIndex, 888u);139}140 141} // namespace142