blob: 51bebc21ce6544e1b32880903d879e3cedd75a6c [file] [log] [blame]
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +00001//===- unittests/ADT/IListNodeTest.cpp - ilist_node unit tests ------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "llvm/ADT/ilist_node.h"
11#include "gtest/gtest.h"
12#include <type_traits>
13
14using namespace llvm;
15using namespace llvm::ilist_detail;
16
17namespace {
18
19struct Node;
20
21struct TagA {};
22struct TagB {};
23
24TEST(IListNodeTest, Options) {
25 static_assert(
26 std::is_same<compute_node_options<Node>::type,
27 compute_node_options<Node, ilist_tag<void>>::type>::value,
28 "default tag is void");
29 static_assert(
30 !std::is_same<compute_node_options<Node, ilist_tag<TagA>>::type,
31 compute_node_options<Node, ilist_tag<void>>::type>::value,
32 "default tag is void, different from TagA");
33 static_assert(
34 !std::is_same<compute_node_options<Node, ilist_tag<TagA>>::type,
35 compute_node_options<Node, ilist_tag<TagB>>::type>::value,
36 "TagA is not TagB");
37 static_assert(
38 std::is_same<
39 compute_node_options<Node, ilist_sentinel_tracking<false>>::type,
40 compute_node_options<Node, ilist_sentinel_tracking<false>,
41 ilist_tag<void>>::type>::value,
42 "default tag is void, even with sentinel tracking off");
43 static_assert(
44 std::is_same<
45 compute_node_options<Node, ilist_sentinel_tracking<false>>::type,
46 compute_node_options<Node, ilist_tag<void>,
47 ilist_sentinel_tracking<false>>::type>::value,
48 "order shouldn't matter");
49 static_assert(
50 std::is_same<
51 compute_node_options<Node, ilist_sentinel_tracking<true>>::type,
52 compute_node_options<Node, ilist_sentinel_tracking<true>,
53 ilist_tag<void>>::type>::value,
54 "default tag is void, even with sentinel tracking on");
55 static_assert(
56 std::is_same<
57 compute_node_options<Node, ilist_sentinel_tracking<true>>::type,
58 compute_node_options<Node, ilist_tag<void>,
59 ilist_sentinel_tracking<true>>::type>::value,
60 "order shouldn't matter");
61 static_assert(
62 std::is_same<
63 compute_node_options<Node, ilist_sentinel_tracking<true>,
64 ilist_tag<TagA>>::type,
65 compute_node_options<Node, ilist_tag<TagA>,
66 ilist_sentinel_tracking<true>>::type>::value,
67 "order shouldn't matter with real tags");
68}
69
70} // end namespace