brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 03da549 Raw
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