1 //===-- stats_test.cpp ------------------------------------------*- C++ -*-===//
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 "tests/scudo_unit_test.h"
10
11 #include "stats.h"
12
TEST(ScudoStatsTest,LocalStats)13 TEST(ScudoStatsTest, LocalStats) {
14 scudo::LocalStats LStats;
15 LStats.init();
16 for (scudo::uptr I = 0; I < scudo::StatCount; I++)
17 EXPECT_EQ(LStats.get(static_cast<scudo::StatType>(I)), 0U);
18 LStats.add(scudo::StatAllocated, 4096U);
19 EXPECT_EQ(LStats.get(scudo::StatAllocated), 4096U);
20 LStats.sub(scudo::StatAllocated, 4096U);
21 EXPECT_EQ(LStats.get(scudo::StatAllocated), 0U);
22 LStats.set(scudo::StatAllocated, 4096U);
23 EXPECT_EQ(LStats.get(scudo::StatAllocated), 4096U);
24 }
25
TEST(ScudoStatsTest,GlobalStats)26 TEST(ScudoStatsTest, GlobalStats) {
27 scudo::GlobalStats GStats;
28 GStats.init();
29 scudo::uptr Counters[scudo::StatCount] = {};
30 GStats.get(Counters);
31 for (scudo::uptr I = 0; I < scudo::StatCount; I++)
32 EXPECT_EQ(Counters[I], 0U);
33 scudo::LocalStats LStats;
34 LStats.init();
35 GStats.link(&LStats);
36 for (scudo::uptr I = 0; I < scudo::StatCount; I++)
37 LStats.add(static_cast<scudo::StatType>(I), 4096U);
38 GStats.get(Counters);
39 for (scudo::uptr I = 0; I < scudo::StatCount; I++)
40 EXPECT_EQ(Counters[I], 4096U);
41 // Unlinking the local stats move numbers to the global stats.
42 GStats.unlink(&LStats);
43 GStats.get(Counters);
44 for (scudo::uptr I = 0; I < scudo::StatCount; I++)
45 EXPECT_EQ(Counters[I], 4096U);
46 }
47