brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · 0b451f5 Raw
184 lines · cpp
1//===-- SourceLocationSpecTest.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 "gtest/gtest.h"10 11#include "lldb/Core/SourceLocationSpec.h"12#include "lldb/Utility/LLDBAssert.h"13 14#include "llvm/Testing/Support/Error.h"15 16using namespace lldb_private;17 18TEST(SourceLocationSpecTest, OperatorBool) {19  SourceLocationSpec invalid(FileSpec(), 0);20  EXPECT_FALSE(invalid);21 22  SourceLocationSpec invalid_filespec(FileSpec(), 4);23  EXPECT_FALSE(invalid_filespec);24 25  SourceLocationSpec invalid_line(FileSpec("/foo/bar"), 0);26  EXPECT_FALSE(invalid_line);27 28  SourceLocationSpec valid_fs_line_no_column(FileSpec("/foo/bar"), 4);29  EXPECT_TRUE(valid_fs_line_no_column);30 31  SourceLocationSpec invalid_fs_column(FileSpec(), 4, 0);32  EXPECT_FALSE(invalid_fs_column);33 34  SourceLocationSpec invalid_line_column(FileSpec("/foo/bar"), 0, 19);35  EXPECT_FALSE(invalid_line_column);36 37  SourceLocationSpec valid_fs_line_zero_column(FileSpec("/foo/bar"), 4, 0);38  EXPECT_TRUE(valid_fs_line_zero_column);39 40  SourceLocationSpec valid_fs_line_column(FileSpec("/foo/bar"), 4, 19);41  EXPECT_TRUE(valid_fs_line_column);42}43 44TEST(SourceLocationSpecTest, FileLineColumnComponents) {45  FileSpec fs("/foo/bar", FileSpec::Style::posix);46  const uint32_t line = 19;47  const uint16_t column = 4;48 49  SourceLocationSpec without_column(fs, line, LLDB_INVALID_COLUMN_NUMBER, false,50                                    true);51  EXPECT_TRUE(without_column);52  EXPECT_EQ(fs, without_column.GetFileSpec());53  EXPECT_EQ(line, without_column.GetLine().value_or(0));54  EXPECT_EQ(std::nullopt, without_column.GetColumn());55  EXPECT_FALSE(without_column.GetCheckInlines());56  EXPECT_TRUE(without_column.GetExactMatch());57  EXPECT_STREQ("check inlines = false, exact match = true, decl = /foo/bar:19",58               without_column.GetString().c_str());59 60  SourceLocationSpec with_column(fs, line, column, true, false);61  EXPECT_TRUE(with_column);62  EXPECT_EQ(column, *with_column.GetColumn());63  EXPECT_TRUE(with_column.GetCheckInlines());64  EXPECT_FALSE(with_column.GetExactMatch());65  EXPECT_STREQ(66      "check inlines = true, exact match = false, decl = /foo/bar:19:4",67      with_column.GetString().c_str());68}69 70static SourceLocationSpec Create(bool check_inlines, bool exact_match,71                                 FileSpec fs, uint32_t line,72                                 uint16_t column = LLDB_INVALID_COLUMN_NUMBER) {73  return SourceLocationSpec(fs, line, column, check_inlines, exact_match);74}75 76TEST(SourceLocationSpecTest, Equal) {77  auto Equal = [](SourceLocationSpec lhs, SourceLocationSpec rhs, bool full) {78    return SourceLocationSpec::Equal(lhs, rhs, full);79  };80 81  const FileSpec fs("/foo/bar", FileSpec::Style::posix);82  const FileSpec other_fs("/foo/baz", FileSpec::Style::posix);83 84  // mutating FileSpec + const Inlined, ExactMatch, Line85  EXPECT_TRUE(86      Equal(Create(false, false, fs, 4), Create(false, false, fs, 4), true));87  EXPECT_TRUE(88      Equal(Create(true, true, fs, 4), Create(true, true, fs, 4), false));89  EXPECT_FALSE(Equal(Create(false, false, fs, 4),90                     Create(false, false, other_fs, 4), true));91  EXPECT_FALSE(92      Equal(Create(true, true, fs, 4), Create(true, true, other_fs, 4), false));93 94  // Mutating FileSpec + const Inlined, ExactMatch, Line, Column95  EXPECT_TRUE(Equal(Create(false, false, fs, 4, 19),96                    Create(false, false, fs, 4, 19), true));97  EXPECT_TRUE(Equal(Create(true, true, fs, 4, 19),98                    Create(true, true, fs, 4, 19), false));99  EXPECT_FALSE(Equal(Create(false, false, fs, 4, 19),100                     Create(false, false, other_fs, 4, 19), true));101  EXPECT_FALSE(Equal(Create(true, true, fs, 4, 19),102                     Create(true, true, other_fs, 4, 19), false));103 104  // Asymetric match105  EXPECT_FALSE(106      Equal(Create(true, true, fs, 4), Create(true, true, fs, 4, 19), true));107  EXPECT_TRUE(Equal(Create(false, false, fs, 4),108                    Create(false, false, fs, 4, 19), false));109 110  // Mutating Inlined, ExactMatch111  EXPECT_FALSE(112      Equal(Create(true, false, fs, 4), Create(false, true, fs, 4), true));113  EXPECT_TRUE(114      Equal(Create(false, true, fs, 4), Create(true, false, fs, 4), false));115 116  // Mutating Column117  EXPECT_FALSE(Equal(Create(true, true, fs, 4, 96),118                     Create(true, true, fs, 4, 19), true));119  EXPECT_TRUE(Equal(Create(false, false, fs, 4, 96),120                    Create(false, false, fs, 4, 19), false));121}122 123TEST(SourceLocationSpecTest, Compare) {124  auto Cmp = [](SourceLocationSpec a, SourceLocationSpec b) {125    return std::clamp(SourceLocationSpec::Compare(a, b), -1, 1);126  };127 128  FileSpec fs("/foo/bar", FileSpec::Style::posix);129  FileSpec other_fs("/foo/baz", FileSpec::Style::posix);130 131  // Asymetric comparaison132  EXPECT_EQ(-1, Cmp(Create(true, true, fs, 4), Create(true, true, fs, 4, 19)));133  EXPECT_EQ(-1,134            Cmp(Create(false, false, fs, 4), Create(false, false, fs, 4, 19)));135  EXPECT_EQ(1, Cmp(Create(true, true, fs, 4, 19), Create(true, true, fs, 4)));136 137  // Mutating FS, const Line138  EXPECT_EQ(139      -1, Cmp(Create(false, false, fs, 4), Create(false, false, other_fs, 4)));140  EXPECT_EQ(-1,141            Cmp(Create(true, true, fs, 4), Create(true, true, other_fs, 4)));142  EXPECT_EQ(1,143            Cmp(Create(false, true, other_fs, 4), Create(false, true, fs, 4)));144  EXPECT_EQ(1,145            Cmp(Create(true, false, other_fs, 4), Create(true, false, fs, 4)));146 147  // Const FS, mutating Line148  EXPECT_EQ(-1, Cmp(Create(false, false, fs, 1), Create(false, false, fs, 4)));149  EXPECT_EQ(-1, Cmp(Create(true, true, fs, 1), Create(true, true, fs, 4)));150  EXPECT_EQ(0, Cmp(Create(false, true, fs, 4), Create(false, true, fs, 4)));151  EXPECT_EQ(0, Cmp(Create(true, false, fs, 4), Create(true, false, fs, 4)));152  EXPECT_EQ(1, Cmp(Create(false, false, fs, 4), Create(false, false, fs, 1)));153  EXPECT_EQ(1, Cmp(Create(true, true, fs, 4), Create(true, true, fs, 1)));154 155  // Const FS, mutating Line, const Column156  EXPECT_EQ(-1,157            Cmp(Create(false, true, fs, 1), Create(false, true, fs, 4, 19)));158  EXPECT_EQ(-1, Cmp(Create(true, true, fs, 1), Create(true, true, fs, 4, 19)));159  EXPECT_EQ(1, Cmp(Create(true, false, fs, 4, 19), Create(true, false, fs, 1)));160  EXPECT_EQ(1, Cmp(Create(true, false, fs, 4, 19), Create(true, false, fs, 1)));161 162  // Mutating FS, const Line, const Column163  EXPECT_EQ(-1, Cmp(Create(false, false, fs, 4, 19),164                    Create(false, false, other_fs, 4, 19)));165  EXPECT_EQ(-1, Cmp(Create(true, true, fs, 4, 19),166                    Create(true, true, other_fs, 4, 19)));167  EXPECT_EQ(168      0, Cmp(Create(false, false, fs, 4, 19), Create(false, false, fs, 4, 19)));169  EXPECT_EQ(0,170            Cmp(Create(true, true, fs, 4, 19), Create(true, true, fs, 4, 19)));171  EXPECT_EQ(1, Cmp(Create(false, true, other_fs, 4, 19),172                   Create(false, true, fs, 4, 19)));173  EXPECT_EQ(1, Cmp(Create(true, false, other_fs, 4, 19),174                   Create(true, false, fs, 4, 19)));175 176  // Const FS, const Line, mutating Column177  EXPECT_EQ(-1, Cmp(Create(false, false, fs, 4, 19),178                    Create(false, false, fs, 4, 96)));179  EXPECT_EQ(1,180            Cmp(Create(true, true, fs, 4, 96), Create(true, true, fs, 4, 19)));181  EXPECT_EQ(182      1, Cmp(Create(false, true, fs, 4, 96), Create(false, true, fs, 4, 19)));183}184