blob: b8f6b88479419df5309dfb01276b17c1b02db5b4 [file] [log] [blame]
Narumol Prangnawarat15effd82019-10-22 14:17:11 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
janeil01c4946c72019-11-07 09:32:28 +00006#include <armnn/Types.hpp>
Narumol Prangnawarat15effd82019-10-22 14:17:11 +01007
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +00008#include "LabelsAndEventClasses.hpp"
9#include "ProfilingGuidGenerator.hpp"
10
11#include <set>
12
Narumol Prangnawarat15effd82019-10-22 14:17:11 +010013#include <boost/test/unit_test.hpp>
Matteo Martincigh15717002019-11-22 14:13:02 +000014#include <boost/format.hpp>
Finn Williams38939ff2020-04-16 16:57:59 +010015#include <thread>
Narumol Prangnawarat15effd82019-10-22 14:17:11 +010016
17using namespace armnn::profiling;
18
19BOOST_AUTO_TEST_SUITE(ProfilingGuidTests)
20
21BOOST_AUTO_TEST_CASE(GuidTest)
22{
23 ProfilingGuid guid0(0);
24 ProfilingGuid guid1(1);
25 ProfilingGuid guid2(1);
26
27 BOOST_TEST(guid0 != guid1);
28 BOOST_TEST(guid1 == guid2);
29 BOOST_TEST(guid0 < guid1);
30 BOOST_TEST(guid0 <= guid1);
31 BOOST_TEST(guid1 <= guid2);
32 BOOST_TEST(guid1 > guid0);
33 BOOST_TEST(guid1 >= guid0);
34 BOOST_TEST(guid1 >= guid2);
35}
36
37BOOST_AUTO_TEST_CASE(StaticGuidTest)
38{
39 ProfilingStaticGuid guid0(0);
40 ProfilingStaticGuid guid1(1);
41 ProfilingStaticGuid guid2(1);
42
43 BOOST_TEST(guid0 != guid1);
44 BOOST_TEST(guid1 == guid2);
45 BOOST_TEST(guid0 < guid1);
46 BOOST_TEST(guid0 <= guid1);
47 BOOST_TEST(guid1 <= guid2);
48 BOOST_TEST(guid1 > guid0);
49 BOOST_TEST(guid1 >= guid0);
50 BOOST_TEST(guid1 >= guid2);
51}
52
53BOOST_AUTO_TEST_CASE(DynamicGuidTest)
54{
55 ProfilingDynamicGuid guid0(0);
56 ProfilingDynamicGuid guid1(1);
57 ProfilingDynamicGuid guid2(1);
58
59 BOOST_TEST(guid0 != guid1);
60 BOOST_TEST(guid1 == guid2);
61 BOOST_TEST(guid0 < guid1);
62 BOOST_TEST(guid0 <= guid1);
63 BOOST_TEST(guid1 <= guid2);
64 BOOST_TEST(guid1 > guid0);
65 BOOST_TEST(guid1 >= guid0);
66 BOOST_TEST(guid1 >= guid2);
67}
68
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +000069void CheckStaticGuid(uint64_t guid, uint64_t expectedGuid)
70{
71 BOOST_TEST(guid == expectedGuid);
72 BOOST_TEST(guid >= MIN_STATIC_GUID);
73}
74
75void CheckDynamicGuid(uint64_t guid, uint64_t expectedGuid)
76{
77 BOOST_TEST(guid == expectedGuid);
78 BOOST_TEST(guid < MIN_STATIC_GUID);
79}
80
81BOOST_AUTO_TEST_CASE(StaticGuidGeneratorCollisionTest)
82{
83 ProfilingGuidGenerator generator;
84 std::set<uint64_t> guids;
Colm Donelan2ba48d22019-11-29 09:10:59 +000085 for ( int i = 0; i < 100000; ++i )
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +000086 {
Matteo Martincigh15717002019-11-22 14:13:02 +000087 std::stringstream ss;
88 ss << i;
89 std::string str = ss.str();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +000090 ProfilingStaticGuid guid = generator.GenerateStaticId(str.c_str());
91 if (guids.find(guid) != guids.end())
92 {
Matteo Martincigh15717002019-11-22 14:13:02 +000093 BOOST_ERROR(boost::str(boost::format("GUID collision occurred: %1% -> %2%") % str % guid));
94 break;
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +000095 }
96 guids.insert(guid);
97 }
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +000098}
99
100BOOST_AUTO_TEST_CASE(StaticGuidGeneratorTest)
101{
102 ProfilingGuidGenerator generator;
103
104 ProfilingStaticGuid staticGuid0 = generator.GenerateStaticId("name");
105 CheckStaticGuid(staticGuid0, LabelsAndEventClasses::NAME_GUID);
106 BOOST_TEST(staticGuid0 != generator.GenerateStaticId("Name"));
107
108 ProfilingStaticGuid staticGuid1 = generator.GenerateStaticId("type");
109 CheckStaticGuid(staticGuid1, LabelsAndEventClasses::TYPE_GUID);
110 BOOST_TEST(staticGuid1 != generator.GenerateStaticId("Type"));
111
112 ProfilingStaticGuid staticGuid2 = generator.GenerateStaticId("index");
113 CheckStaticGuid(staticGuid2, LabelsAndEventClasses::INDEX_GUID);
114 BOOST_TEST(staticGuid2 != generator.GenerateStaticId("Index"));
115}
116
117BOOST_AUTO_TEST_CASE(DynamicGuidGeneratorTest)
118{
119 ProfilingGuidGenerator generator;
120
121 for (unsigned int i = 0; i < 100; ++i)
122 {
123 ProfilingDynamicGuid guid = generator.NextGuid();
124 CheckDynamicGuid(guid, i);
125 }
126}
127
Finn Williams38939ff2020-04-16 16:57:59 +0100128BOOST_AUTO_TEST_CASE (ProfilingGuidThreadTest)
129{
130 ProfilingGuidGenerator profilingGuidGenerator;
131
132 auto guidGenerator = [&profilingGuidGenerator]()
133 {
134 for (int i = 0; i < 1000; ++i)
135 {
136 profilingGuidGenerator.NextGuid();
137 }
138 };
139
140 std::thread t1(guidGenerator);
141 std::thread t2(guidGenerator);
142 std::thread t3(guidGenerator);
143
144 t1.join();
145 t2.join();
146 t3.join();
147
148 uint64_t guid = profilingGuidGenerator.NextGuid();
149 BOOST_CHECK(guid == 3000u);
150}
151
Narumol Prangnawarat15effd82019-10-22 14:17:11 +0100152BOOST_AUTO_TEST_SUITE_END()