123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- //===- unittests/AST/DeclTest.cpp --- Declaration tests -------------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // Unit tests for the ASTVector container.
- //
- //===----------------------------------------------------------------------===//
- #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
|