LLVM OpenMP
TestVector.cpp
Go to the documentation of this file.
1//===- TestVector.cpp - Tests for kmp_vector class -----------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "kmp_adt.h"
10#include "gtest/gtest.h"
11
12namespace {
13
14/// Type-parameterized test fixture so each test runs against multiple
15/// INLINE_THRESHOLD values, exercising both the inline and dynamic paths.
16template <typename Config> class kmp_vector_test : public ::testing::Test {};
17
18template <size_t N> struct InlineThreshold {
19 template <typename T> using Vec = kmp_vector<T, N>;
20 static constexpr size_t value = N;
21};
22
23using InlineThresholds =
24 ::testing::Types<InlineThreshold<0>, InlineThreshold<1>, InlineThreshold<8>,
25 InlineThreshold<16>>;
26TYPED_TEST_SUITE(kmp_vector_test, InlineThresholds);
27
28//===----------------------------------------------------------------------===//
29// Construction
30//===----------------------------------------------------------------------===//
31
32TYPED_TEST(kmp_vector_test, DefaultConstruction) {
33 typename TypeParam::template Vec<int> v;
34 EXPECT_EQ(v.size(), 0u);
35 EXPECT_TRUE(v.empty());
36}
37
38TYPED_TEST(kmp_vector_test, ConstructWithCapacity) {
39 typename TypeParam::template Vec<int> v(10);
40 EXPECT_EQ(v.size(), 0u);
41 EXPECT_TRUE(v.empty());
42}
43
44TYPED_TEST(kmp_vector_test, ConstructWithData) {
45 int data[] = {1, 2, 3, 4, 5};
46 typename TypeParam::template Vec<int> v(5, data, 5);
47
48 EXPECT_EQ(v.size(), 5u);
49 EXPECT_EQ(v[0], 1);
50 EXPECT_EQ(v[1], 2);
51 EXPECT_EQ(v[2], 3);
52 EXPECT_EQ(v[3], 4);
53 EXPECT_EQ(v[4], 5);
54}
55
56TYPED_TEST(kmp_vector_test, ConstructWithCapacityLargerThanSize) {
57 int data[] = {1, 2, 3};
58 typename TypeParam::template Vec<int> v(10, data, 3);
59
60 EXPECT_EQ(v.size(), 3u);
61 EXPECT_EQ(v[0], 1);
62 EXPECT_EQ(v[1], 2);
63 EXPECT_EQ(v[2], 3);
64}
65
66//===----------------------------------------------------------------------===//
67// Copy Semantics
68//===----------------------------------------------------------------------===//
69
70TYPED_TEST(kmp_vector_test, CopyConstruction) {
71 int data[] = {1, 2, 3};
72 typename TypeParam::template Vec<int> v1(3, data, 3);
73 typename TypeParam::template Vec<int> v2(v1);
74
75 EXPECT_EQ(v2.size(), 3u);
76 EXPECT_EQ(v2[0], 1);
77 EXPECT_EQ(v2[1], 2);
78 EXPECT_EQ(v2[2], 3);
79
80 // Modify v1, v2 should be unchanged
81 v1[0] = 100;
82 EXPECT_EQ(v2[0], 1);
83}
84
85TYPED_TEST(kmp_vector_test, CopyAssignment) {
86 int data1[] = {1, 2, 3};
87 int data2[] = {4, 5};
88 typename TypeParam::template Vec<int> v1(3, data1, 3);
89 typename TypeParam::template Vec<int> v2(2, data2, 2);
90
91 v2 = v1;
92
93 EXPECT_EQ(v2.size(), 3u);
94 EXPECT_EQ(v2[0], 1);
95 EXPECT_EQ(v2[1], 2);
96 EXPECT_EQ(v2[2], 3);
97}
98
99TYPED_TEST(kmp_vector_test, SelfCopyAssignment) {
100 int data[] = {1, 2, 3};
101 typename TypeParam::template Vec<int> v(3, data, 3);
102
103 typename TypeParam::template Vec<int> &v_ref = v;
104 v = v_ref; // Avoid self-assignment warning
105
106 EXPECT_EQ(v.size(), 3u);
107 EXPECT_EQ(v[0], 1);
108}
109
110//===----------------------------------------------------------------------===//
111// Move Semantics
112//===----------------------------------------------------------------------===//
113
114TYPED_TEST(kmp_vector_test, MoveConstruction) {
115 int data[] = {1, 2, 3};
116 typename TypeParam::template Vec<int> v1(3, data, 3);
117 typename TypeParam::template Vec<int> v2(std::move(v1));
118
119 EXPECT_EQ(v2.size(), 3u);
120 EXPECT_EQ(v2[0], 1);
121 EXPECT_EQ(v2[1], 2);
122 EXPECT_EQ(v2[2], 3);
123
124 // v1 should be empty after move
125 EXPECT_EQ(v1.size(), 0u);
126}
127
128TYPED_TEST(kmp_vector_test, MoveAssignment) {
129 int data1[] = {1, 2, 3};
130 int data2[] = {4, 5};
131 typename TypeParam::template Vec<int> v1(3, data1, 3);
132 typename TypeParam::template Vec<int> v2(2, data2, 2);
133
134 v2 = std::move(v1);
135
136 EXPECT_EQ(v2.size(), 3u);
137 EXPECT_EQ(v2[0], 1);
138 EXPECT_EQ(v1.size(), 0u);
139}
140
141TYPED_TEST(kmp_vector_test, SelfMoveAssignment) {
142 int data[] = {1, 2, 3};
143 typename TypeParam::template Vec<int> v(3, data, 3);
144
145 typename TypeParam::template Vec<int> &v_ref = v;
146 v = std::move(v_ref); // Avoid self-move warning
147
148 // Self-move should leave object in valid state
149 EXPECT_EQ(v.size(), 3u);
150 EXPECT_EQ(v[0], 1);
151}
152
153//===----------------------------------------------------------------------===//
154// push_back
155//===----------------------------------------------------------------------===//
156
157TYPED_TEST(kmp_vector_test, PushBackToEmpty) {
158 typename TypeParam::template Vec<int> v;
159
160 v.push_back(42);
161
162 EXPECT_EQ(v.size(), 1u);
163 EXPECT_EQ(v[0], 42);
164}
165
166TYPED_TEST(kmp_vector_test, PushBackMultiple) {
167 typename TypeParam::template Vec<int> v;
168
169 v.push_back(1);
170 v.push_back(2);
171 v.push_back(3);
172 v.push_back(4);
173 v.push_back(5);
174
175 EXPECT_EQ(v.size(), 5u);
176 EXPECT_EQ(v[0], 1);
177 EXPECT_EQ(v[1], 2);
178 EXPECT_EQ(v[2], 3);
179 EXPECT_EQ(v[3], 4);
180 EXPECT_EQ(v[4], 5);
181}
182
183TYPED_TEST(kmp_vector_test, PushBackGrowth) {
184 typename TypeParam::template Vec<int> v;
185
186 // Push many elements to trigger multiple resizes
187 for (int i = 0; i < 100; ++i)
188 v.push_back(i);
189
190 EXPECT_EQ(v.size(), 100u);
191 for (int i = 0; i < 100; ++i)
192 EXPECT_EQ(v[i], i);
193}
194
195//===----------------------------------------------------------------------===//
196// clear
197//===----------------------------------------------------------------------===//
198
199TYPED_TEST(kmp_vector_test, Clear) {
200 int data[] = {1, 2, 3};
201 typename TypeParam::template Vec<int> v(3, data, 3);
202
203 EXPECT_EQ(v.size(), 3u);
204
205 v.clear();
206
207 EXPECT_EQ(v.size(), 0u);
208 EXPECT_TRUE(v.empty());
209}
210
211TYPED_TEST(kmp_vector_test, ClearEmpty) {
212 typename TypeParam::template Vec<int> v;
213
214 v.clear();
215
216 EXPECT_EQ(v.size(), 0u);
217 EXPECT_TRUE(v.empty());
218}
219
220TYPED_TEST(kmp_vector_test, PushBackAfterClear) {
221 int data[] = {1, 2, 3};
222 typename TypeParam::template Vec<int> v(3, data, 3);
223
224 v.clear();
225 v.push_back(42);
226
227 EXPECT_EQ(v.size(), 1u);
228 EXPECT_EQ(v[0], 42);
229}
230
231//===----------------------------------------------------------------------===//
232// empty
233//===----------------------------------------------------------------------===//
234
235TYPED_TEST(kmp_vector_test, EmptyOnDefault) {
236 typename TypeParam::template Vec<int> v;
237 EXPECT_TRUE(v.empty());
238}
239
240TYPED_TEST(kmp_vector_test, NotEmptyAfterPush) {
241 typename TypeParam::template Vec<int> v;
242 v.push_back(1);
243 EXPECT_FALSE(v.empty());
244}
245
246TYPED_TEST(kmp_vector_test, EmptyAfterClear) {
247 typename TypeParam::template Vec<int> v;
248 v.push_back(1);
249 v.clear();
250 EXPECT_TRUE(v.empty());
251}
252
253//===----------------------------------------------------------------------===//
254// contains
255//===----------------------------------------------------------------------===//
256
257TYPED_TEST(kmp_vector_test, ContainsFound) {
258 int data[] = {1, 2, 3, 4, 5};
259 typename TypeParam::template Vec<int> v(5, data, 5);
260
261 EXPECT_TRUE(v.contains(1));
262 EXPECT_TRUE(v.contains(3));
263 EXPECT_TRUE(v.contains(5));
264}
265
266TYPED_TEST(kmp_vector_test, ContainsNotFound) {
267 int data[] = {1, 2, 3, 4, 5};
268 typename TypeParam::template Vec<int> v(5, data, 5);
269
270 EXPECT_FALSE(v.contains(0));
271 EXPECT_FALSE(v.contains(6));
272 EXPECT_FALSE(v.contains(-1));
273}
274
275TYPED_TEST(kmp_vector_test, ContainsEmpty) {
276 typename TypeParam::template Vec<int> v;
277
278 EXPECT_FALSE(v.contains(0));
279 EXPECT_FALSE(v.contains(1));
280}
281
282//===----------------------------------------------------------------------===//
283// is_set_equal
284//===----------------------------------------------------------------------===//
285
286TYPED_TEST(kmp_vector_test, IsSetEqualSameOrder) {
287 int data[] = {1, 2, 3};
288 typename TypeParam::template Vec<int> v1(3, data, 3);
289 typename TypeParam::template Vec<int> v2(3, data, 3);
290
291 EXPECT_TRUE(v1.is_set_equal(v2));
292 EXPECT_TRUE(v2.is_set_equal(v1));
293}
294
295TYPED_TEST(kmp_vector_test, IsSetEqualDifferentOrder) {
296 int data1[] = {1, 2, 3};
297 int data2[] = {3, 1, 2};
298 typename TypeParam::template Vec<int> v1(3, data1, 3);
299 typename TypeParam::template Vec<int> v2(3, data2, 3);
300
301 EXPECT_TRUE(v1.is_set_equal(v2));
302 EXPECT_TRUE(v2.is_set_equal(v1));
303}
304
305TYPED_TEST(kmp_vector_test, IsSetEqualDifferentSize) {
306 int data1[] = {1, 2, 3};
307 int data2[] = {1, 2};
308 typename TypeParam::template Vec<int> v1(3, data1, 3);
309 typename TypeParam::template Vec<int> v2(2, data2, 2);
310
311 EXPECT_FALSE(v1.is_set_equal(v2));
312 EXPECT_FALSE(v2.is_set_equal(v1));
313}
314
315TYPED_TEST(kmp_vector_test, IsSetEqualDifferentElements) {
316 int data1[] = {1, 2, 3};
317 int data2[] = {1, 2, 4};
318 typename TypeParam::template Vec<int> v1(3, data1, 3);
319 typename TypeParam::template Vec<int> v2(3, data2, 3);
320
321 EXPECT_FALSE(v1.is_set_equal(v2));
322}
323
324TYPED_TEST(kmp_vector_test, IsSetEqualEmpty) {
325 typename TypeParam::template Vec<int> v1;
326 typename TypeParam::template Vec<int> v2;
327
328 EXPECT_TRUE(v1.is_set_equal(v2));
329}
330
331TYPED_TEST(kmp_vector_test, IsSetEqualWithDuplicates) {
332 int data1[] = {1, 1};
333 int data2[] = {1, 2};
334 typename TypeParam::template Vec<int> v1(2, data1, 2);
335 typename TypeParam::template Vec<int> v2(2, data2, 2);
336
337 EXPECT_FALSE(v1.is_set_equal(v2));
338 EXPECT_FALSE(v2.is_set_equal(v1));
339}
340
341TYPED_TEST(kmp_vector_test, IsSetEqualWithDuplicatesSame) {
342 int data1[] = {1, 1};
343 int data2[] = {1};
344 typename TypeParam::template Vec<int> v1(2, data1, 2);
345 typename TypeParam::template Vec<int> v2(1, data2, 1);
346
347 EXPECT_TRUE(v1.is_set_equal(v2));
348 EXPECT_TRUE(v2.is_set_equal(v1));
349}
350
351//===----------------------------------------------------------------------===//
352// contains with Comparator
353//===----------------------------------------------------------------------===//
354
355TYPED_TEST(kmp_vector_test, ContainsWithComparator) {
356 int data[] = {10, 20, 30};
357 typename TypeParam::template Vec<int> v(3, data, 3);
358
359 // Compare by tens digit
360 auto same_tens = [](const int &a, const int &b) {
361 return (a / 10) == (b / 10);
362 };
363
364 EXPECT_TRUE(v.contains(15, same_tens)); // 15/10 == 1, matches 10/10 == 1
365 EXPECT_TRUE(v.contains(25, same_tens)); // 25/10 == 2, matches 20/10 == 2
366 EXPECT_FALSE(v.contains(45, same_tens)); // 45/10 == 4, no match
367}
368
369TYPED_TEST(kmp_vector_test, ContainsPointerWithComparator) {
370 int a = 100, b = 200, c = 300;
371 int *data[] = {&a, &b, &c};
372 typename TypeParam::template Vec<int *> v(3, data, 3);
373
374 // Comparator that compares pointed-to values
375 auto deref_comp = [](int *const &pa, int *const &pb) { return *pa == *pb; };
376
377 int x = 200;
378 int *px = &x;
379
380 // Without comparator: comparing pointers (different addresses)
381 EXPECT_FALSE(v.contains(px));
382
383 // With comparator: comparing values (200 == 200)
384 EXPECT_TRUE(v.contains(px, deref_comp));
385}
386
387TYPED_TEST(kmp_vector_test, ContainsWithCapturingComparator) {
388 int data[] = {1, 2, 3};
389 typename TypeParam::template Vec<int> v(3, data, 3);
390
391 // Capturing comparator: matches when a + offset == b. This requires the
392 // template functor API; a plain function pointer cannot carry the capture.
393 int offset = 10;
394 auto shifted_eq = [offset](const int &a, const int &b) {
395 return a + offset == b;
396 };
397
398 EXPECT_TRUE(v.contains(11, shifted_eq)); // 1 + 10 == 11
399 EXPECT_TRUE(v.contains(13, shifted_eq)); // 3 + 10 == 13
400 EXPECT_FALSE(v.contains(99, shifted_eq)); // no match
401}
402
403//===----------------------------------------------------------------------===//
404// is_set_equal with Comparator
405//===----------------------------------------------------------------------===//
406
407TYPED_TEST(kmp_vector_test, IsSetEqualWithComparator) {
408 int data1[] = {10, 20, 30};
409 int data2[] = {35, 15, 25}; // Same tens digits as data1, different order
410 typename TypeParam::template Vec<int> v1(3, data1, 3);
411 typename TypeParam::template Vec<int> v2(3, data2, 3);
412
413 auto same_tens = [](const int &a, const int &b) {
414 return (a / 10) == (b / 10);
415 };
416
417 // Without comparator: not equal
418 EXPECT_FALSE(v1.is_set_equal(v2));
419
420 // With comparator: equal (same tens digits)
421 EXPECT_TRUE(v1.is_set_equal(v2, same_tens));
422}
423
424TYPED_TEST(kmp_vector_test, IsSetEqualPointerWithComparator) {
425 int a1 = 100, b1 = 200, c1 = 300;
426 int a2 = 100, b2 = 200, c2 = 300;
427 int *data1[] = {&a1, &b1, &c1};
428 int *data2[] = {&c2, &a2, &b2}; // Same values, different order and addresses
429 typename TypeParam::template Vec<int *> v1(3, data1, 3);
430 typename TypeParam::template Vec<int *> v2(3, data2, 3);
431
432 auto deref_comp = [](int *const &pa, int *const &pb) { return *pa == *pb; };
433
434 // Without comparator: not equal (different pointers)
435 EXPECT_FALSE(v1.is_set_equal(v2));
436
437 // With comparator: equal (same pointed-to values)
438 EXPECT_TRUE(v1.is_set_equal(v2, deref_comp));
439}
440
441TYPED_TEST(kmp_vector_test, IsSetEqualWithCapturingComparator) {
442 int data1[] = {1, 2, 3};
443 int data2[] = {13, 11, 12}; // each element of data1 differs by offset
444 typename TypeParam::template Vec<int> v1(3, data1, 3);
445 typename TypeParam::template Vec<int> v2(3, data2, 3);
446
447 // Capturing comparator: matches when the values differ by exactly offset.
448 // is_set_equal invokes the comparator in both argument orders, so it must be
449 // symmetric. This requires the template functor API; a plain function pointer
450 // cannot carry the capture.
451 int offset = 10;
452 auto offset_eq = [offset](const int &a, const int &b) {
453 int diff = a - b;
454 return diff == offset || diff == -offset;
455 };
456
457 // Without comparator: not equal
458 EXPECT_FALSE(v1.is_set_equal(v2));
459
460 // With comparator: equal (each element differs by offset)
461 EXPECT_TRUE(v1.is_set_equal(v2, offset_eq));
462}
463
464//===----------------------------------------------------------------------===//
465// Indexing
466//===----------------------------------------------------------------------===//
467
468TYPED_TEST(kmp_vector_test, IndexOperator) {
469 int data[] = {10, 20, 30};
470 typename TypeParam::template Vec<int> v(3, data, 3);
471
472 EXPECT_EQ(v[0], 10);
473 EXPECT_EQ(v[1], 20);
474 EXPECT_EQ(v[2], 30);
475}
476
477TYPED_TEST(kmp_vector_test, IndexOperatorModify) {
478 int data[] = {10, 20, 30};
479 typename TypeParam::template Vec<int> v(3, data, 3);
480
481 v[1] = 200;
482
483 EXPECT_EQ(v[1], 200);
484}
485
486TYPED_TEST(kmp_vector_test, ConstIndexOperator) {
487 int data[] = {10, 20, 30};
488 const typename TypeParam::template Vec<int> v(3, data, 3);
489
490 EXPECT_EQ(v[0], 10);
491 EXPECT_EQ(v[1], 20);
492 EXPECT_EQ(v[2], 30);
493}
494
495//===----------------------------------------------------------------------===//
496// Iterators
497//===----------------------------------------------------------------------===//
498
499TYPED_TEST(kmp_vector_test, BeginEnd) {
500 int data[] = {1, 2, 3};
501 typename TypeParam::template Vec<int> v(3, data, 3);
502
503 int *begin = v.begin();
504 int *end = v.end();
505
506 EXPECT_EQ(end - begin, 3);
507 EXPECT_EQ(*begin, 1);
508 EXPECT_EQ(*(end - 1), 3);
509}
510
511TYPED_TEST(kmp_vector_test, ConstBeginEnd) {
512 int data[] = {1, 2, 3};
513 const typename TypeParam::template Vec<int> v(3, data, 3);
514
515 const int *begin = v.begin();
516 const int *end = v.end();
517
518 EXPECT_EQ(end - begin, 3);
519 EXPECT_EQ(*begin, 1);
520}
521
522TYPED_TEST(kmp_vector_test, RangeBasedFor) {
523 int data[] = {1, 2, 3, 4, 5};
524 typename TypeParam::template Vec<int> v(5, data, 5);
525
526 int sum = 0;
527 for (int x : v)
528 sum += x;
529
530 EXPECT_EQ(sum, 15);
531}
532
533TYPED_TEST(kmp_vector_test, RangeBasedForModify) {
534 int data[] = {1, 2, 3};
535 typename TypeParam::template Vec<int> v(3, data, 3);
536
537 for (int &x : v)
538 x *= 2;
539
540 EXPECT_EQ(v[0], 2);
541 EXPECT_EQ(v[1], 4);
542 EXPECT_EQ(v[2], 6);
543}
544
545TYPED_TEST(kmp_vector_test, RangeBasedForEmpty) {
546 typename TypeParam::template Vec<int> v;
547
548 int count = 0;
549 for (int x : v) {
550 (void)x;
551 count++;
552 }
553
554 EXPECT_EQ(count, 0);
555}
556
557//===----------------------------------------------------------------------===//
558// Edge Cases
559//===----------------------------------------------------------------------===//
560
561TYPED_TEST(kmp_vector_test, EmptyVector) {
562 typename TypeParam::template Vec<int> v;
563
564 EXPECT_EQ(v.size(), 0u);
565 EXPECT_EQ(v.begin(), v.end());
566 EXPECT_FALSE(v.contains(0));
567}
568
569TYPED_TEST(kmp_vector_test, SingleElement) {
570 typename TypeParam::template Vec<int> v;
571 v.push_back(42);
572
573 EXPECT_EQ(v.size(), 1u);
574 EXPECT_EQ(v[0], 42);
575 EXPECT_TRUE(v.contains(42));
576 EXPECT_EQ(v.end() - v.begin(), 1);
577}
578
579//===----------------------------------------------------------------------===//
580// Different Types
581//===----------------------------------------------------------------------===//
582
583TYPED_TEST(kmp_vector_test, PointerType) {
584 int a = 1, b = 2, c = 3;
585 int *data[] = {&a, &b, &c};
586 typename TypeParam::template Vec<int *> v(3, data, 3);
587
588 EXPECT_EQ(v.size(), 3u);
589 EXPECT_EQ(*v[0], 1);
590 EXPECT_EQ(*v[1], 2);
591 EXPECT_EQ(*v[2], 3);
592}
593
594TYPED_TEST(kmp_vector_test, SizeTType) {
595 size_t data[] = {100, 200, 300};
596 typename TypeParam::template Vec<size_t> v(3, data, 3);
597
598 EXPECT_EQ(v[0], 100u);
599 EXPECT_EQ(v[1], 200u);
600 EXPECT_EQ(v[2], 300u);
601}
602
603//===----------------------------------------------------------------------===//
604// Reserve
605//===----------------------------------------------------------------------===//
606
607TYPED_TEST(kmp_vector_test, Reserve) {
608 typename TypeParam::template Vec<int> v;
609 v.reserve(100);
610
611 EXPECT_EQ(v.size(), 0u);
612
613 // Push one element to get a valid data pointer
614 v.push_back(0);
615 const int *data_ptr = v.begin();
616
617 // Should be able to push without reallocation
618 for (int i = 1; i < 100; ++i)
619 v.push_back(i);
620
621 EXPECT_EQ(v.size(), 100u);
622 EXPECT_EQ(v.begin(), data_ptr) << "Reallocation occurred despite reserve()";
623 for (int i = 0; i < 100; ++i)
624 EXPECT_EQ(v[i], i);
625}
626
627} // namespace
#define N
Definition bug54082.c:13
void
Definition ittnotify.h:3324
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void * data
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp end
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp begin
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t count
#define i
Definition kmp_stub.cpp:87
int a