brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 6db6783 Raw
61 lines · cpp
1//===- StorageUniquerTest.cpp - StorageUniquer 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#include "mlir/Support/StorageUniquer.h"10#include "gmock/gmock.h"11 12using namespace mlir;13 14namespace {15/// Simple storage class used for testing.16template <typename ConcreteT, typename... Args>17struct SimpleStorage : public StorageUniquer::BaseStorage {18  using Base = SimpleStorage<ConcreteT, Args...>;19  using KeyTy = std::tuple<Args...>;20 21  SimpleStorage(KeyTy key) : key(key) {}22 23  /// Get an instance of this storage instance.24  template <typename... ParamsT>25  static ConcreteT *get(StorageUniquer &uniquer, ParamsT &&...params) {26    return uniquer.get<ConcreteT>(27        /*initFn=*/{}, std::make_tuple(std::forward<ParamsT>(params)...));28  }29 30  /// Construct an instance with the given storage allocator.31  static ConcreteT *construct(StorageUniquer::StorageAllocator &alloc,32                              KeyTy key) {33    return new (alloc.allocate<ConcreteT>())34        ConcreteT(std::forward<KeyTy>(key));35  }36  bool operator==(const KeyTy &key) const { return this->key == key; }37 38  KeyTy key;39};40} // namespace41 42TEST(StorageUniquerTest, NonTrivialDestructor) {43  struct NonTrivialStorage : public SimpleStorage<NonTrivialStorage, bool *> {44    using Base::Base;45    ~NonTrivialStorage() {46      bool *wasDestructed = std::get<0>(key);47      *wasDestructed = true;48    }49  };50 51  // Verify that the storage instance destructor was properly called.52  bool wasDestructed = false;53  {54    StorageUniquer uniquer;55    uniquer.registerParametricStorageType<NonTrivialStorage>();56    NonTrivialStorage::get(uniquer, &wasDestructed);57  }58 59  EXPECT_TRUE(wasDestructed);60}61