//===- unittest/ADT/IntrusiveRefCntPtrTest.cpp ----------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

#include "llvm/ADT/IntrusiveRefCntPtr.h"
#include "gtest/gtest.h"

namespace llvm {

namespace {
struct SimpleRefCounted : public RefCountedBase<SimpleRefCounted> {
  SimpleRefCounted() { ++NumInstances; }
  SimpleRefCounted(const SimpleRefCounted &) : RefCountedBase() {
    ++NumInstances;
  }
  ~SimpleRefCounted() { --NumInstances; }

  static int NumInstances;
};
int SimpleRefCounted::NumInstances = 0;
} // anonymous namespace

TEST(IntrusiveRefCntPtr, RefCountedBaseCopyDoesNotLeak) {
  EXPECT_EQ(0, SimpleRefCounted::NumInstances);
  {
    SimpleRefCounted *S1 = new SimpleRefCounted;
    IntrusiveRefCntPtr<SimpleRefCounted> R1 = S1;
    SimpleRefCounted *S2 = new SimpleRefCounted(*S1);
    IntrusiveRefCntPtr<SimpleRefCounted> R2 = S2;
    EXPECT_EQ(2, SimpleRefCounted::NumInstances);
  }
  EXPECT_EQ(0, SimpleRefCounted::NumInstances);
}

struct InterceptRefCounted : public RefCountedBase<InterceptRefCounted> {
  InterceptRefCounted(bool *Released, bool *Retained)
    : Released(Released), Retained(Retained) {}
  bool * const Released;
  bool * const Retained;
};
template <> struct IntrusiveRefCntPtrInfo<InterceptRefCounted> {
  static void retain(InterceptRefCounted *I) {
    *I->Retained = true;
    I->Retain();
  }
  static void release(InterceptRefCounted *I) {
    *I->Released = true;
    I->Release();
  }
};
TEST(IntrusiveRefCntPtr, UsesTraitsToRetainAndRelease) {
  bool Released = false;
  bool Retained = false;
  {
    InterceptRefCounted *I = new InterceptRefCounted(&Released, &Retained);
    IntrusiveRefCntPtr<InterceptRefCounted> R = I;
  }
  EXPECT_TRUE(Released);
  EXPECT_TRUE(Retained);
}

} // end namespace llvm
