brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 2b6f53b Raw
99 lines · cpp
1//===--- rtsan_test_context.cpp - Realtime Sanitizer ------------*- 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-exception6//7//===----------------------------------------------------------------------===//8//9//===----------------------------------------------------------------------===//10 11#include "rtsan_test_utilities.h"12 13#include "rtsan/rtsan.h"14#include "rtsan/rtsan_context.h"15 16#include <gtest/gtest.h>17 18using namespace __rtsan;19using namespace ::testing;20 21class TestRtsanContext : public Test {22protected:23  void SetUp() override { __rtsan_ensure_initialized(); }24};25 26TEST_F(TestRtsanContext, IsNotRealtimeAfterDefaultConstruction) {27  Context context{};28  EXPECT_THAT(context.InRealtimeContext(), Eq(false));29}30 31TEST_F(TestRtsanContext, IsRealtimeAfterRealtimePush) {32  Context context{};33  context.RealtimePush();34  EXPECT_THAT(context.InRealtimeContext(), Eq(true));35}36 37TEST_F(TestRtsanContext, IsNotRealtimeAfterRealtimePushAndPop) {38  Context context{};39  context.RealtimePush();40  ASSERT_THAT(context.InRealtimeContext(), Eq(true));41  context.RealtimePop();42  EXPECT_THAT(context.InRealtimeContext(), Eq(false));43}44 45TEST_F(TestRtsanContext, RealtimeContextStateIsStatefullyTracked) {46  Context context{};47  auto const ExpectRealtime = [&context](bool is_rt) {48    EXPECT_THAT(context.InRealtimeContext(), Eq(is_rt));49  };50  ExpectRealtime(false);51  context.RealtimePush(); // depth 152  ExpectRealtime(true);53  context.RealtimePush(); // depth 254  ExpectRealtime(true);55  context.RealtimePop(); // depth 156  ExpectRealtime(true);57  context.RealtimePush(); // depth 258  ExpectRealtime(true);59  context.RealtimePop(); // depth 160  ExpectRealtime(true);61  context.RealtimePop(); // depth 062  ExpectRealtime(false);63  context.RealtimePush(); // depth 164  ExpectRealtime(true);65}66 67TEST_F(TestRtsanContext, IsNotBypassedAfterDefaultConstruction) {68  Context context{};69  EXPECT_THAT(context.IsBypassed(), Eq(false));70}71 72TEST_F(TestRtsanContext, IsBypassedAfterBypassPush) {73  Context context{};74  context.BypassPush();75  EXPECT_THAT(context.IsBypassed(), Eq(true));76}77 78TEST_F(TestRtsanContext, BypassedStateIsStatefullyTracked) {79  Context context{};80  auto const ExpectBypassed = [&context](bool is_bypassed) {81    EXPECT_THAT(context.IsBypassed(), Eq(is_bypassed));82  };83  ExpectBypassed(false);84  context.BypassPush(); // depth 185  ExpectBypassed(true);86  context.BypassPush(); // depth 287  ExpectBypassed(true);88  context.BypassPop(); // depth 189  ExpectBypassed(true);90  context.BypassPush(); // depth 291  ExpectBypassed(true);92  context.BypassPop(); // depth 193  ExpectBypassed(true);94  context.BypassPop(); // depth 095  ExpectBypassed(false);96  context.BypassPush(); // depth 197  ExpectBypassed(true);98}99