diff options
author | Erik Pilkington <erik.pilkington@gmail.com> | 2017-08-09 21:30:57 +0000 |
---|---|---|
committer | Erik Pilkington <erik.pilkington@gmail.com> | 2017-08-09 21:30:57 +0000 |
commit | ba34a24c6780a8050b9347c466717cb3d30ee501 (patch) | |
tree | ee1d4fd7068a992e8cdd7800a382604ac15580df /test | |
parent | dc64cee52cc045127d8adf5570379a90488dc1c6 (diff) |
[demangler] Improve representation of substitutions/templates
Differential revision: https://reviews.llvm.org/D36427
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@310525 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/unittest_demangle.pass.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/test/unittest_demangle.pass.cpp b/test/unittest_demangle.pass.cpp new file mode 100644 index 0000000..86672e2 --- /dev/null +++ b/test/unittest_demangle.pass.cpp @@ -0,0 +1,123 @@ +//===----------------------- unittest_demangle.cpp ------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "../src/cxa_demangle.cpp" + +using namespace __cxxabiv1; + +void testPODSmallVector() { + { // {push/pop}_back + PODSmallVector<int, 1> PSV; + PSV.push_back(0); + PSV.push_back(1); + PSV.push_back(2); + PSV.push_back(3); + for (int i = 0; i < 4; ++i) + assert(PSV[i] == i); + PSV.pop_back(); + for (int i = 0; i < 3; ++i) + assert(PSV[i] == i); + PSV.pop_back(); + PSV.pop_back(); + assert(!PSV.empty() && PSV.size() == 1); + PSV.pop_back(); + assert(PSV.empty() && PSV.size() == 0); + } + + { + PODSmallVector<int, 1> PSV1; + PSV1.push_back(1); + PSV1.push_back(2); + PSV1.push_back(3); + + PODSmallVector<int, 1> PSV2; + std::swap(PSV1, PSV2); + assert(PSV1.size() == 0); + assert(PSV2.size() == 3); + int i = 1; + for (int x : PSV2) { + assert(x == i); + ++i; + } + assert(i == 4); + std::swap(PSV1, PSV2); + assert(PSV1.size() == 3); + assert(PSV2.size() == 0); + i = 1; + for (int x : PSV1) { + assert(x == i); + ++i; + } + assert(i == 4); + } + + { + PODSmallVector<int, 10> PSV1; + PODSmallVector<int, 10> PSV2; + PSV1.push_back(0); + PSV1.push_back(1); + PSV1.push_back(2); + assert(PSV1.size() == 3); + assert(PSV2.size() == 0); + std::swap(PSV1, PSV2); + assert(PSV1.size() == 0); + assert(PSV2.size() == 3); + int i = 0; + for (int x : PSV2) { + assert(x == i); + ++i; + } + for (int x : PSV1) { + assert(false); + (void)x; + } + } +} + +void testSubstitutionTable() { + { + SubstitutionTable<2> Tab; + + NameType Names[] = {{"MERP"}, {"MARP"}, {"MAMP"}}; + Tab.pushPack(); + Tab.pushSubstitutionIntoPack(&Names[0]); + Tab.pushSubstitutionIntoPack(&Names[1]); + Tab.pushSubstitutionIntoPack(&Names[2]); + + int Index = 0; + for (Node* N : Tab.nthSubstitution(0)) { + assert(static_cast<NameType*>(N)->getName() == Names[Index].getName()); + ++Index; + } + assert(Index == 3); + + Tab.popPack(); + assert(Tab.empty() && Tab.size() == 0); + Tab.pushSubstitution(&Names[0]); + Tab.pushSubstitution(&Names[1]); + assert(!Tab.empty() && Tab.size() == 2); + + int I = 0; + for (Node* N : Tab.nthSubstitution(0)) { + assert(static_cast<NameType*>(N)->getName() == "MERP"); + assert(I == 0); + ++I; + } + for (Node* N : Tab.nthSubstitution(1)) { + assert(static_cast<NameType*>(N)->getName() == "MARP"); + assert(I == 1); + ++I; + } + } +} + +int main() { + testPODSmallVector(); + testSubstitutionTable(); +} |