93 lines · cpp
1//===- unittests/AST/DeclTest.cpp --- Declaration tests -------------------===//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// Unit tests for the ASTVector container.10//11//===----------------------------------------------------------------------===//12 13#include "clang/AST/ASTVector.h"14#include "clang/AST/ASTContext.h"15#include "clang/Basic/Builtins.h"16#include "clang/Basic/FileManager.h"17#include "clang/Basic/SourceManager.h"18#include "gtest/gtest.h"19 20using namespace clang;21 22namespace clang {23namespace ast {24 25namespace {26class ASTVectorTest : public ::testing::Test {27protected:28 ASTVectorTest()29 : FileMgr(FileMgrOpts),30 Diags(DiagnosticIDs::create(), DiagOpts, new IgnoringDiagConsumer()),31 SourceMgr(Diags, FileMgr), Idents(LangOpts, nullptr),32 Ctxt(LangOpts, SourceMgr, Idents, Sels, Builtins, TU_Complete) {}33 34 FileSystemOptions FileMgrOpts;35 FileManager FileMgr;36 DiagnosticOptions DiagOpts;37 DiagnosticsEngine Diags;38 SourceManager SourceMgr;39 LangOptions LangOpts;40 IdentifierTable Idents;41 SelectorTable Sels;42 Builtin::Context Builtins;43 ASTContext Ctxt;44};45} // unnamed namespace46 47TEST_F(ASTVectorTest, Compile) {48 ASTVector<int> V;49 V.insert(Ctxt, V.begin(), 0);50}51 52TEST_F(ASTVectorTest, InsertFill) {53 ASTVector<double> V;54 55 // Ensure returned iterator points to first of inserted elements56 auto I = V.insert(Ctxt, V.begin(), 5, 1.0);57 ASSERT_EQ(V.begin(), I);58 59 // Check non-empty case as well60 I = V.insert(Ctxt, V.begin() + 1, 5, 1.0);61 ASSERT_EQ(V.begin() + 1, I);62 63 // And insert-at-end64 I = V.insert(Ctxt, V.end(), 5, 1.0);65 ASSERT_EQ(V.end() - 5, I);66}67 68TEST_F(ASTVectorTest, InsertEmpty) {69 ASTVector<double> V;70 71 // Ensure no pointer overflow when inserting empty range72 int Values[] = { 0, 1, 2, 3 };73 ArrayRef<int> IntVec(Values);74 auto I = V.insert(Ctxt, V.begin(), IntVec.begin(), IntVec.begin());75 ASSERT_EQ(V.begin(), I);76 ASSERT_TRUE(V.empty());77 78 // Non-empty range79 I = V.insert(Ctxt, V.begin(), IntVec.begin(), IntVec.end());80 ASSERT_EQ(V.begin(), I);81 82 // Non-Empty Vector, empty range83 I = V.insert(Ctxt, V.end(), IntVec.begin(), IntVec.begin());84 ASSERT_EQ(V.begin() + IntVec.size(), I);85 86 // Non-Empty Vector, non-empty range87 I = V.insert(Ctxt, V.end(), IntVec.begin(), IntVec.end());88 ASSERT_EQ(V.begin() + IntVec.size(), I);89}90 91} // end namespace ast92} // end namespace clang93