136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===- llvm/unittest/ADT/MakeUniqueTest.cpp - make_unique unit tests ------===//
236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//                     The LLVM Compiler Infrastructure
436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// This file is distributed under the University of Illinois Open Source
636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// License. See LICENSE.TXT for details.
736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/ADT/STLExtras.h"
1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "gtest/gtest.h"
1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include <tuple>
1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesusing namespace llvm;
1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace {
1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesTEST(MakeUniqueTest, SingleObject) {
1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p0 = make_unique<int>();
1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p0);
2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(0, *p0);
2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p1 = make_unique<int>(5);
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p1);
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(5, *p1);
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p2 = make_unique<std::tuple<int, int>>(0, 1);
2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p2);
2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(std::make_tuple(0, 1), *p2);
2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p3 = make_unique<std::tuple<int, int, int>>(0, 1, 2);
3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p3);
3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(std::make_tuple(0, 1, 2), *p3);
3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p4 = make_unique<std::tuple<int, int, int, int>>(0, 1, 2, 3);
3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p4);
3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(std::make_tuple(0, 1, 2, 3), *p4);
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p5 = make_unique<std::tuple<int, int, int, int, int>>(0, 1, 2, 3, 4);
3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p5);
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(std::make_tuple(0, 1, 2, 3, 4), *p5);
4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p6 =
4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      make_unique<std::tuple<int, int, int, int, int, int>>(0, 1, 2, 3, 4, 5);
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p6);
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(std::make_tuple(0, 1, 2, 3, 4, 5), *p6);
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p7 = make_unique<std::tuple<int, int, int, int, int, int, int>>(
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      0, 1, 2, 3, 4, 5, 6);
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p7);
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(std::make_tuple(0, 1, 2, 3, 4, 5, 6), *p7);
5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p8 = make_unique<std::tuple<int, int, int, int, int, int, int, int>>(
5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      0, 1, 2, 3, 4, 5, 6, 7);
5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p8);
5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(std::make_tuple(0, 1, 2, 3, 4, 5, 6, 7), *p8);
5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p9 =
5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      make_unique<std::tuple<int, int, int, int, int, int, int, int, int>>(
5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines          0, 1, 2, 3, 4, 5, 6, 7, 8);
6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p9);
6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(std::make_tuple(0, 1, 2, 3, 4, 5, 6, 7, 8), *p9);
6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p10 =
6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      make_unique<std::tuple<int, int, int, int, int, int, int, int, int, int>>(
6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines          0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p10);
6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(std::make_tuple(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), *p10);
6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesTEST(MakeUniqueTest, Array) {
7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  auto p1 = make_unique<int[]>(2);
7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE((bool)p1);
7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(0, p1[0]);
7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(0, p1[1]);
7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
77