1f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie//===- unittests/AST/DeclTest.cpp --- Declaration tests -------------------===// 2f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie// 3f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie// The LLVM Compiler Infrastructure 4f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie// 5f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie// This file is distributed under the University of Illinois Open Source 6f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie// License. See LICENSE.TXT for details. 7f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie// 8f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie//===----------------------------------------------------------------------===// 9f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie// 10f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie// Unit tests for the ASTVector container. 11f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie// 12f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie//===----------------------------------------------------------------------===// 13f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie 14f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie#include "llvm/Support/Compiler.h" 15f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie#include "clang/AST/ASTContext.h" 16f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie#include "clang/AST/ASTVector.h" 17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "clang/Basic/Builtins.h" 18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "gtest/gtest.h" 19f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie 20f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikieusing namespace clang; 21f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie 22176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace clang { 23176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace ast { 24176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 25176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace { 26176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass ASTVectorTest : public ::testing::Test { 27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesprotected: 28176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASTVectorTest() 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines : FileMgr(FileMgrOpts), DiagID(new DiagnosticIDs()), 30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Diags(DiagID, new DiagnosticOptions, new IgnoringDiagConsumer()), 31176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines SourceMgr(Diags, FileMgr), Idents(LangOpts, nullptr), 32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Ctxt(LangOpts, SourceMgr, Idents, Sels, Builtins) {} 33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines FileSystemOptions FileMgrOpts; 35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines FileManager FileMgr; 36176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines IntrusiveRefCntPtr<DiagnosticIDs> DiagID; 37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines DiagnosticsEngine Diags; 38176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines SourceManager SourceMgr; 39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines LangOptions LangOpts; 40176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines IdentifierTable Idents; 41176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines SelectorTable Sels; 42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Builtin::Context Builtins; 43176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASTContext Ctxt; 44176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 45176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} // unnamed namespace 46176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 47176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesTEST_F(ASTVectorTest, Compile) { 48f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie ASTVector<int> V; 49176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines V.insert(Ctxt, V.begin(), 0); 50176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 51176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 52176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesTEST_F(ASTVectorTest, InsertFill) { 53176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASTVector<double> V; 54176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 55176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // Ensure returned iterator points to first of inserted elements 56176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines auto I = V.insert(Ctxt, V.begin(), 5, 1.0); 57176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASSERT_EQ(V.begin(), I); 58176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 59176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // Check non-empty case as well 60176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines I = V.insert(Ctxt, V.begin() + 1, 5, 1.0); 61176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASSERT_EQ(V.begin() + 1, I); 62176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 63176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // And insert-at-end 64176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines I = V.insert(Ctxt, V.end(), 5, 1.0); 65176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASSERT_EQ(V.end() - 5, I); 66176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 67176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 68176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesTEST_F(ASTVectorTest, InsertEmpty) { 69176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASTVector<double> V; 70176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 71176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // Ensure no pointer overflow when inserting empty range 72176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines int Values[] = { 0, 1, 2, 3 }; 73176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ArrayRef<int> IntVec(Values); 74176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines auto I = V.insert(Ctxt, V.begin(), IntVec.begin(), IntVec.begin()); 75176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASSERT_EQ(V.begin(), I); 76176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASSERT_TRUE(V.empty()); 77176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 78176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // Non-empty range 79176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines I = V.insert(Ctxt, V.begin(), IntVec.begin(), IntVec.end()); 80176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASSERT_EQ(V.begin(), I); 81176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 82176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // Non-Empty Vector, empty range 83176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines I = V.insert(Ctxt, V.end(), IntVec.begin(), IntVec.begin()); 84176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASSERT_EQ(V.begin() + IntVec.size(), I); 85176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 86176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // Non-Empty Vector, non-empty range 87176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines I = V.insert(Ctxt, V.end(), IntVec.begin(), IntVec.end()); 88176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ASSERT_EQ(V.begin() + IntVec.size(), I); 89f475bf83a45435a211edb4e0ef6ac3481ce7b3feDavid Blaikie} 90176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 91176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} // end namespace ast 92176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} // end namespace clang 93