| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- //===- unittests/AST/DeclTest.cpp --- Declaration tests -------------------===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- //
- // Unit tests for the ASTVector container.
- //
- //===----------------------------------------------------------------------===//
- #include "llvm/Support/Compiler.h"
- #include "clang/AST/ASTContext.h"
- #include "clang/AST/ASTVector.h"
- #include "clang/Basic/Builtins.h"
- #include "gtest/gtest.h"
- using namespace clang;
- namespace clang {
- namespace ast {
- namespace {
- class ASTVectorTest : public ::testing::Test {
- protected:
- ASTVectorTest()
- : FileMgr(FileMgrOpts), DiagID(new DiagnosticIDs()),
- Diags(DiagID, new DiagnosticOptions, new IgnoringDiagConsumer()),
- SourceMgr(Diags, FileMgr), Idents(LangOpts, nullptr),
- Ctxt(LangOpts, SourceMgr, Idents, Sels, Builtins) {}
- FileSystemOptions FileMgrOpts;
- FileManager FileMgr;
- IntrusiveRefCntPtr<DiagnosticIDs> DiagID;
- DiagnosticsEngine Diags;
- SourceManager SourceMgr;
- LangOptions LangOpts;
- IdentifierTable Idents;
- SelectorTable Sels;
- Builtin::Context Builtins;
- ASTContext Ctxt;
- };
- } // unnamed namespace
- TEST_F(ASTVectorTest, Compile) {
- ASTVector<int> V;
- V.insert(Ctxt, V.begin(), 0);
- }
- TEST_F(ASTVectorTest, InsertFill) {
- ASTVector<double> V;
- // Ensure returned iterator points to first of inserted elements
- auto I = V.insert(Ctxt, V.begin(), 5, 1.0);
- ASSERT_EQ(V.begin(), I);
- // Check non-empty case as well
- I = V.insert(Ctxt, V.begin() + 1, 5, 1.0);
- ASSERT_EQ(V.begin() + 1, I);
- // And insert-at-end
- I = V.insert(Ctxt, V.end(), 5, 1.0);
- ASSERT_EQ(V.end() - 5, I);
- }
- TEST_F(ASTVectorTest, InsertEmpty) {
- ASTVector<double> V;
- // Ensure no pointer overflow when inserting empty range
- int Values[] = { 0, 1, 2, 3 };
- ArrayRef<int> IntVec(Values);
- auto I = V.insert(Ctxt, V.begin(), IntVec.begin(), IntVec.begin());
- ASSERT_EQ(V.begin(), I);
- ASSERT_TRUE(V.empty());
- // Non-empty range
- I = V.insert(Ctxt, V.begin(), IntVec.begin(), IntVec.end());
- ASSERT_EQ(V.begin(), I);
- // Non-Empty Vector, empty range
- I = V.insert(Ctxt, V.end(), IntVec.begin(), IntVec.begin());
- ASSERT_EQ(V.begin() + IntVec.size(), I);
- // Non-Empty Vector, non-empty range
- I = V.insert(Ctxt, V.end(), IntVec.begin(), IntVec.end());
- ASSERT_EQ(V.begin() + IntVec.size(), I);
- }
- } // end namespace ast
- } // end namespace clang
|