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
13TEST(ScudoStatsTest, LocalStats) {
14 scudo::LocalStats LStats;
15 LStats.init();
16 for (scudo::uptr I = 0; I < scudo::StatCount; I++)
17 EXPECT_EQ(LStats.get(I: static_cast<scudo::StatType>(I)), 0U);
18 LStats.add(I: scudo::StatAllocated, V: 4096U);
19 EXPECT_EQ(LStats.get(I: scudo::StatAllocated), 4096U);
20 LStats.sub(I: scudo::StatAllocated, V: 4096U);
21 EXPECT_EQ(LStats.get(I: scudo::StatAllocated), 0U);
22 LStats.set(I: scudo::StatAllocated, V: 4096U);
23 EXPECT_EQ(LStats.get(I: scudo::StatAllocated), 4096U);
24}
25
26TEST(ScudoStatsTest, GlobalStats) {
27 scudo::GlobalStats GStats;
28 GStats.init();
29 scudo::uptr Counters[scudo::StatCount] = {};
30 GStats.get(S: 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(S: &LStats);
36 for (scudo::uptr I = 0; I < scudo::StatCount; I++)
37 LStats.add(I: static_cast<scudo::StatType>(I), V: 4096U);
38 GStats.get(S: 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(S: &LStats);
43 GStats.get(S: Counters);
44 for (scudo::uptr I = 0; I < scudo::StatCount; I++)
45 EXPECT_EQ(Counters[I], 4096U);
46}
47

source code of compiler-rt/lib/scudo/standalone/tests/stats_test.cpp