1ab932bcbSDavide Italiano //=== llvm/unittest/ADT/BreadthFirstIteratorTest.cpp - BFS iterator tests -===//
2ab932bcbSDavide Italiano //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ab932bcbSDavide Italiano //
7ab932bcbSDavide Italiano //===----------------------------------------------------------------------===//
8ab932bcbSDavide Italiano
9ab932bcbSDavide Italiano #include "llvm/ADT/BreadthFirstIterator.h"
10ab932bcbSDavide Italiano #include "TestGraph.h"
11ab932bcbSDavide Italiano #include "gtest/gtest.h"
12ab932bcbSDavide Italiano
13ab932bcbSDavide Italiano using namespace llvm;
14ab932bcbSDavide Italiano
15ab932bcbSDavide Italiano namespace llvm {
16ab932bcbSDavide Italiano
TEST(BreadthFristIteratorTest,Basic)17ab932bcbSDavide Italiano TEST(BreadthFristIteratorTest, Basic) {
18ab932bcbSDavide Italiano typedef bf_iterator<Graph<4>> BFIter;
19ab932bcbSDavide Italiano
20ab932bcbSDavide Italiano Graph<4> G;
21ab932bcbSDavide Italiano G.AddEdge(0, 1);
22ab932bcbSDavide Italiano G.AddEdge(0, 2);
23ab932bcbSDavide Italiano G.AddEdge(1, 3);
24ab932bcbSDavide Italiano
25ab932bcbSDavide Italiano auto It = BFIter::begin(G);
26ab932bcbSDavide Italiano auto End = BFIter::end(G);
27ab932bcbSDavide Italiano EXPECT_EQ(It.getLevel(), 0U);
28ab932bcbSDavide Italiano EXPECT_EQ(*It, G.AccessNode(0));
29ab932bcbSDavide Italiano ++It;
30ab932bcbSDavide Italiano EXPECT_EQ(It.getLevel(), 1U);
31ab932bcbSDavide Italiano EXPECT_EQ(*It, G.AccessNode(1));
32ab932bcbSDavide Italiano ++It;
33ab932bcbSDavide Italiano EXPECT_EQ(It.getLevel(), 1U);
34ab932bcbSDavide Italiano EXPECT_EQ(*It, G.AccessNode(2));
35ab932bcbSDavide Italiano ++It;
36ab932bcbSDavide Italiano EXPECT_EQ(It.getLevel(), 2U);
37ab932bcbSDavide Italiano EXPECT_EQ(*It, G.AccessNode(3));
38ab932bcbSDavide Italiano ++It;
39ab932bcbSDavide Italiano EXPECT_EQ(It, End);
40ab932bcbSDavide Italiano }
41ab932bcbSDavide Italiano
TEST(BreadthFristIteratorTest,Cycle)42ab932bcbSDavide Italiano TEST(BreadthFristIteratorTest, Cycle) {
43ab932bcbSDavide Italiano typedef bf_iterator<Graph<4>> BFIter;
44ab932bcbSDavide Italiano
45ab932bcbSDavide Italiano Graph<4> G;
46ab932bcbSDavide Italiano G.AddEdge(0, 1);
47ab932bcbSDavide Italiano G.AddEdge(1, 0);
48ab932bcbSDavide Italiano G.AddEdge(1, 2);
49ab932bcbSDavide Italiano G.AddEdge(2, 1);
50ab932bcbSDavide Italiano G.AddEdge(2, 1);
51ab932bcbSDavide Italiano G.AddEdge(2, 3);
52ab932bcbSDavide Italiano G.AddEdge(3, 2);
53ab932bcbSDavide Italiano G.AddEdge(3, 1);
54ab932bcbSDavide Italiano G.AddEdge(3, 0);
55ab932bcbSDavide Italiano
56ab932bcbSDavide Italiano auto It = BFIter::begin(G);
57ab932bcbSDavide Italiano auto End = BFIter::end(G);
58ab932bcbSDavide Italiano EXPECT_EQ(It.getLevel(), 0U);
59ab932bcbSDavide Italiano EXPECT_EQ(*It, G.AccessNode(0));
60ab932bcbSDavide Italiano ++It;
61ab932bcbSDavide Italiano EXPECT_EQ(It.getLevel(), 1U);
62ab932bcbSDavide Italiano EXPECT_EQ(*It, G.AccessNode(1));
63ab932bcbSDavide Italiano ++It;
64ab932bcbSDavide Italiano EXPECT_EQ(It.getLevel(), 2U);
65ab932bcbSDavide Italiano EXPECT_EQ(*It, G.AccessNode(2));
66ab932bcbSDavide Italiano ++It;
67ab932bcbSDavide Italiano EXPECT_EQ(It.getLevel(), 3U);
68ab932bcbSDavide Italiano EXPECT_EQ(*It, G.AccessNode(3));
69ab932bcbSDavide Italiano ++It;
70ab932bcbSDavide Italiano EXPECT_EQ(It, End);
71ab932bcbSDavide Italiano }
72ab932bcbSDavide Italiano
73ab932bcbSDavide Italiano } // end namespace llvm
74