1// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
2// -*- Mode: C++ -*-
3//
4// Copyright (C) 2013-2022 Red Hat, Inc.
5
6/// @file
7///
8/// This is a collection of unit tests for functions defined in
9/// abg-tgools-utils.cc.
10
11#include <iostream>
12#include "abg-tools-utils.h"
13
14using namespace abigail::tools_utils;
15using std::cerr;
16
17int
18main(int, char**)
19{
20
21  /// These are unit tests for abigail::tools_utils::decl_names_equal.
22  /// Just run the resulting runtesttoolsutils program under the
23  /// debugger to debug this if need be.
24
25  ABG_ASSERT(decl_names_equal("foo", "foo") == true);
26
27  ABG_ASSERT(decl_names_equal("foo", "bar") == false);
28
29  ABG_ASSERT(decl_names_equal("__anonymous_struct__1::foo",
30			      "__anonymous_struct__2::foo") == true);
31
32  ABG_ASSERT(decl_names_equal
33	     ("__anonymous_struct__1::foo::__anonymous_struct__2::bar",
34	      "__anonymous_struct__10::foo::__anonymous_struct__11::bar")
35	     == true);
36
37  ABG_ASSERT(decl_names_equal
38	     ("__anonymous_union__1::foo::__anonymous_union__2::bar",
39	      "__anonymous_union__10::foo::__anonymous_union__11::bar")
40	     == true);
41
42  ABG_ASSERT(decl_names_equal
43	     ("__anonymous_enum__1::foo::__anonymous_enum__2::bar",
44	      "__anonymous_enum__10::foo::__anonymous_enum__11::bar")
45	     == true);
46
47  ABG_ASSERT(decl_names_equal
48	     ("__anonymous_struct__1::bar::__anonymous_struct__2::baz",
49	      "__anonymous_struct__10::foo::__anonymous_struct__11::bar")
50	     == false);
51
52  ABG_ASSERT(decl_names_equal
53	     ("__anonymous_struct__1::foo::__anonymous_struct__2::baz",
54	      "__anonymous_struct__10::foo::__anonymous_struct__11::bar")
55	     == false);
56
57  ABG_ASSERT(decl_names_equal
58	     ("__anonymous_struct__1::foo::__anonymous_struct__2::bar",
59	      "__anonymous_struct__10::foo::__anonymous_union__11::bar")
60	     == false);
61
62  ABG_ASSERT(decl_names_equal
63	     ("__anonymous_struct__1::foo::__anonymous_struct__2::bar",
64	      "__anonymous_struct__10::foo::__anonymous_enum__11::bar")
65	     == false);
66
67  ABG_ASSERT(decl_names_equal
68	     ("OT::Extension<OT::ExtensionSubst>::__anonymous_union__",
69	      "OT::Extension<OT::ExtensionSubst>::__anonymous_union__")
70	     == true);
71
72  ABG_ASSERT(decl_names_equal("S0::m2", "S0::m12") == false);
73
74  ABG_ASSERT(!decl_names_equal("S0::S1", "S0"));
75  ABG_ASSERT(!decl_names_equal("S0", "S0::S1"));
76  ABG_ASSERT(!decl_names_equal("S1::S0", "S0::S1"));
77  ABG_ASSERT(!decl_names_equal("__anonymous_struct__::S0", "__anonymous_struct__"));
78  ABG_ASSERT(!decl_names_equal("__anonymous_struct__", "__anonymous_struct__::S1"));
79  ABG_ASSERT(!decl_names_equal("__anonymous_struct__::S0", "__anonymous_struct__::S1"));
80  ABG_ASSERT(!decl_names_equal("S0::__anonymous_struct__", "__anonymous_struct__"));
81  ABG_ASSERT(!decl_names_equal("__anonymous_struct__", "S1::__anonymous_struct__"));
82  ABG_ASSERT(!decl_names_equal("S0::__anonymous_struct__", "S1::__anonymous_struct__"));
83
84  return 0;
85}
86