1 // Copyright 2021 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3
4 #include "gn/builder_record_map.h"
5 #include "gn/builder_record.h"
6 #include "gn/label.h"
7 #include "gn/source_dir.h"
8 #include "util/test/test.h"
9
TEST(BuilderRecordMap,Construction)10 TEST(BuilderRecordMap, Construction) {
11 const Label kLabel1(SourceDir("//src"), "foo");
12 BuilderRecordMap map;
13 EXPECT_TRUE(map.empty());
14 EXPECT_EQ(0u, map.size());
15 EXPECT_FALSE(map.find(kLabel1));
16 }
17
TEST(BuilderRecordMap,TryEmplace)18 TEST(BuilderRecordMap, TryEmplace) {
19 const Label kLabel1(SourceDir("//src"), "foo");
20 const Label kLabel2(SourceDir("//src"), "bar");
21 const Label kLabel3(SourceDir("//third_party/src"), "zoo");
22
23 BuilderRecordMap map;
24
25 auto ret = map.try_emplace(kLabel1, nullptr, BuilderRecord::ITEM_TARGET);
26 EXPECT_TRUE(ret.first);
27 EXPECT_TRUE(ret.second);
28 EXPECT_EQ(BuilderRecord::ITEM_TARGET, ret.second->type());
29 EXPECT_EQ(kLabel1, ret.second->label());
30 EXPECT_EQ(ret.second, map.find(kLabel1));
31 EXPECT_EQ(1u, map.size());
32
33 BuilderRecord* record = ret.second;
34 ret = map.try_emplace(kLabel1, nullptr, BuilderRecord::ITEM_CONFIG);
35 EXPECT_FALSE(ret.first);
36 EXPECT_EQ(record, ret.second);
37 EXPECT_EQ(1u, map.size());
38
39 ret = map.try_emplace(kLabel2, nullptr, BuilderRecord::ITEM_CONFIG);
40 EXPECT_TRUE(ret.first);
41 EXPECT_TRUE(ret.second);
42 EXPECT_EQ(2u, map.size());
43 EXPECT_EQ(BuilderRecord::ITEM_CONFIG, ret.second->type());
44 EXPECT_EQ(kLabel2, ret.second->label());
45 EXPECT_EQ(ret.second, map.find(kLabel2));
46
47 ret = map.try_emplace(kLabel3, nullptr, BuilderRecord::ITEM_TOOLCHAIN);
48 EXPECT_TRUE(ret.first);
49 EXPECT_TRUE(ret.second);
50 EXPECT_EQ(3u, map.size());
51 EXPECT_EQ(BuilderRecord::ITEM_TOOLCHAIN, ret.second->type());
52 EXPECT_EQ(kLabel3, ret.second->label());
53 EXPECT_EQ(ret.second, map.find(kLabel3));
54
55 ret = map.try_emplace(kLabel2, nullptr, BuilderRecord::ITEM_CONFIG);
56 EXPECT_FALSE(ret.first);
57
58 EXPECT_EQ(3u, map.size());
59 EXPECT_TRUE(map.find(kLabel1));
60 EXPECT_TRUE(map.find(kLabel2));
61 EXPECT_TRUE(map.find(kLabel3));
62 }
63