brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · cec8f46 Raw
88 lines · cpp
1//===-- vector_test.cpp -----------------------------------------*- C++ -*-===//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#include "tests/scudo_unit_test.h"10 11#include "vector.h"12 13TEST(ScudoVectorTest, Basic) {14  scudo::Vector<int, 64U> V;15  EXPECT_EQ(V.size(), 0U);16  V.push_back(42);17  EXPECT_EQ(V.size(), 1U);18  EXPECT_EQ(V[0], 42);19  V.push_back(43);20  EXPECT_EQ(V.size(), 2U);21  EXPECT_EQ(V[0], 42);22  EXPECT_EQ(V[1], 43);23}24 25TEST(ScudoVectorTest, Stride) {26  scudo::Vector<scudo::uptr, 32U> V;27  for (scudo::uptr I = 0; I < 1000; I++) {28    V.push_back(I);29    EXPECT_EQ(V.size(), I + 1U);30    EXPECT_EQ(V[I], I);31  }32  for (scudo::uptr I = 0; I < 1000; I++)33    EXPECT_EQ(V[I], I);34}35 36TEST(ScudoVectorTest, ResizeReduction) {37  scudo::Vector<int, 64U> V;38  V.push_back(0);39  V.push_back(0);40  EXPECT_EQ(V.size(), 2U);41  V.resize(1);42  EXPECT_EQ(V.size(), 1U);43}44 45#if defined(__linux__)46 47#include <sys/resource.h>48 49// Verify that if the reallocate fails, nothing new is added.50TEST(ScudoVectorTest, ReallocateFails) {51  scudo::Vector<char, 256U> V;52  scudo::uptr capacity = V.capacity();53 54  // Get the current address space size.55  rlimit Limit = {};56  EXPECT_EQ(0, getrlimit(RLIMIT_AS, &Limit));57 58  rlimit EmptyLimit = {.rlim_cur = 0, .rlim_max = Limit.rlim_max};59  EXPECT_EQ(0, setrlimit(RLIMIT_AS, &EmptyLimit));60 61  // qemu does not honor the setrlimit, so verify before proceeding.62  scudo::MemMapT MemMap;63  if (MemMap.map(/*Addr=*/0U, scudo::getPageSizeCached(), "scudo:test",64                 MAP_ALLOWNOMEM)) {65    MemMap.unmap();66    setrlimit(RLIMIT_AS, &Limit);67    TEST_SKIP("Limiting address space does not prevent mmap.");68  }69 70  V.resize(capacity);71  // Set the last element so we can check it later.72  V.back() = '\0';73 74  // The reallocate should fail, so the capacity should not change.75  V.reserve(capacity + 1000);76  EXPECT_EQ(capacity, V.capacity());77 78  // Now try to do a push back and verify that the size does not change.79  scudo::uptr Size = V.size();80  V.push_back('2');81  EXPECT_EQ(Size, V.size());82  // Verify that the last element in the vector did not change.83  EXPECT_EQ('\0', V.back());84 85  EXPECT_EQ(0, setrlimit(RLIMIT_AS, &Limit));86}87#endif88