| //===-- stats_test.cpp ------------------------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "tests/scudo_unit_test.h" |
| |
| #include "stats.h" |
| |
| TEST(ScudoStatsTest, LocalStats) { |
| scudo::LocalStats LStats; |
| LStats.init(); |
| for (scudo::uptr I = 0; I < scudo::StatCount; I++) |
| EXPECT_EQ(LStats.get(static_cast<scudo::StatType>(I)), 0U); |
| LStats.add(scudo::StatAllocated, 4096U); |
| EXPECT_EQ(LStats.get(scudo::StatAllocated), 4096U); |
| LStats.sub(scudo::StatAllocated, 4096U); |
| EXPECT_EQ(LStats.get(scudo::StatAllocated), 0U); |
| LStats.set(scudo::StatAllocated, 4096U); |
| EXPECT_EQ(LStats.get(scudo::StatAllocated), 4096U); |
| } |
| |
| TEST(ScudoStatsTest, GlobalStats) { |
| scudo::GlobalStats GStats; |
| GStats.init(); |
| scudo::uptr Counters[scudo::StatCount] = {}; |
| GStats.get(Counters); |
| for (scudo::uptr I = 0; I < scudo::StatCount; I++) |
| EXPECT_EQ(Counters[I], 0U); |
| scudo::LocalStats LStats; |
| LStats.init(); |
| GStats.link(&LStats); |
| for (scudo::uptr I = 0; I < scudo::StatCount; I++) |
| LStats.add(static_cast<scudo::StatType>(I), 4096U); |
| GStats.get(Counters); |
| for (scudo::uptr I = 0; I < scudo::StatCount; I++) |
| EXPECT_EQ(Counters[I], 4096U); |
| // Unlinking the local stats move numbers to the global stats. |
| GStats.unlink(&LStats); |
| GStats.get(Counters); |
| for (scudo::uptr I = 0; I < scudo::StatCount; I++) |
| EXPECT_EQ(Counters[I], 4096U); |
| } |