//===----------------------------------------------------------------------===//
//
//                     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 <memory>

#include "benchmark/benchmark.h"

static void BM_SharedPtrCreateDestroy(benchmark::State& st) {
  while (st.KeepRunning()) {
    auto sp = std::make_shared<int>(42);
    benchmark::DoNotOptimize(sp.get());
  }
}
BENCHMARK(BM_SharedPtrCreateDestroy);

static void BM_SharedPtrIncDecRef(benchmark::State& st) {
  auto sp = std::make_shared<int>(42);
  benchmark::DoNotOptimize(sp.get());
  while (st.KeepRunning()) {
    std::shared_ptr<int> sp2(sp);
    benchmark::ClobberMemory();
  }
}
BENCHMARK(BM_SharedPtrIncDecRef);

static void BM_WeakPtrIncDecRef(benchmark::State& st) {
  auto sp = std::make_shared<int>(42);
  benchmark::DoNotOptimize(sp.get());
  while (st.KeepRunning()) {
    std::weak_ptr<int> wp(sp);
    benchmark::ClobberMemory();
  }
}
BENCHMARK(BM_WeakPtrIncDecRef);

BENCHMARK_MAIN();
