blob: b559d6d31a3d7ecdc406f43914399369881083aa [file] [log] [blame]
Googler68f21152021-11-30 11:45:33 +00001// Part of the Crubit project, under the Apache License v2.0 with LLVM
2// Exceptions. See /LICENSE for license information.
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4
5#include "lifetime_annotations/lifetime_symbol_table.h"
6
Dmitri Gribenkoa087d232023-07-10 08:03:46 -07007#include <optional>
8
Luca Versaric21d92f2022-05-25 00:56:30 -07009#include "gtest/gtest.h"
Dmitri Gribenkoa087d232023-07-10 08:03:46 -070010#include "lifetime_annotations/lifetime.h"
Googler68f21152021-11-30 11:45:33 +000011
Martin Brænne1a207c52022-04-19 00:05:38 -070012namespace clang {
13namespace tidy {
14namespace lifetimes {
Googler68f21152021-11-30 11:45:33 +000015namespace {
16
17TEST(LifetimeSymbolTableTest, Static) {
18 LifetimeSymbolTable table;
19 EXPECT_EQ(table.LookupName("static"), Lifetime::Static());
20 EXPECT_EQ(table.LookupNameAndMaybeDeclare("static"), Lifetime::Static());
21}
22
23TEST(LifetimeSymbolTableTest, LookupName) {
24 LifetimeSymbolTable table;
25
26 EXPECT_EQ(table.LookupName("a"), std::nullopt);
27 Lifetime a = table.LookupNameAndMaybeDeclare("a");
28 EXPECT_EQ(table.LookupName("a"), a);
29 EXPECT_EQ(table.LookupNameAndMaybeDeclare("a"), a);
30
31 EXPECT_EQ(table.LookupName("b"), std::nullopt);
32 Lifetime b = table.LookupNameAndMaybeDeclare("b");
33 EXPECT_NE(a, b);
34 EXPECT_EQ(table.LookupName("b"), b);
35 EXPECT_EQ(table.LookupNameAndMaybeDeclare("b"), b);
36}
37
Googler70557292021-11-30 11:46:02 +000038TEST(LifetimeSymbolTableTest, LookupLifetime) {
39 LifetimeSymbolTable table;
40
41 Lifetime a = table.LookupNameAndMaybeDeclare("a");
42 Lifetime b = table.LookupNameAndMaybeDeclare("b");
43
44 EXPECT_EQ(table.LookupLifetime(a), "a");
45 EXPECT_EQ(table.LookupLifetime(b), "b");
46}
47
Luca Versari95ce68f2022-03-24 14:44:19 +000048TEST(LifetimeSymbolTableTest, RebindLifetime) {
49 LifetimeSymbolTable table;
50
51 Lifetime a = table.LookupNameAndMaybeDeclare("a");
52 Lifetime b = Lifetime::CreateVariable();
53
54 EXPECT_EQ(table.LookupLifetime(a), "a");
55
56 table.Rebind("a", b);
57 EXPECT_EQ(table.LookupName("a"), b);
58 EXPECT_EQ(table.LookupLifetime(a), std::nullopt);
59 EXPECT_EQ(table.LookupLifetime(b), "a");
60}
61
Googler352ec042021-11-30 11:46:23 +000062TEST(LifetimeSymbolTableTest, LookupLifetimeAndMaybeDeclare) {
63 {
64 LifetimeSymbolTable table;
65
66 table.LookupNameAndMaybeDeclare("a");
67 table.LookupNameAndMaybeDeclare("c");
68
69 EXPECT_EQ(table.LookupLifetimeAndMaybeDeclare(Lifetime::CreateVariable()),
70 "b");
71 EXPECT_EQ(table.LookupLifetimeAndMaybeDeclare(Lifetime::CreateVariable()),
72 "d");
73 }
74
75 {
76 LifetimeSymbolTable table;
77 for (int i = 0; i < 26; ++i) {
78 table.LookupLifetimeAndMaybeDeclare(Lifetime::CreateVariable());
79 }
80 EXPECT_EQ(table.LookupLifetimeAndMaybeDeclare(Lifetime::CreateVariable()),
81 "aa");
82 EXPECT_EQ(table.LookupLifetimeAndMaybeDeclare(Lifetime::CreateVariable()),
83 "ab");
84 }
85}
86
Googler68f21152021-11-30 11:45:33 +000087} // namespace
Martin Brænne1a207c52022-04-19 00:05:38 -070088} // namespace lifetimes
89} // namespace tidy
90} // namespace clang