blob: 00af64b6576b1d0903a7c40c4974695b2ce020d2 [file] [log] [blame]
//===-- tsan_flags_test.cc ------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file is a part of ThreadSanitizer (TSan), a race detector.
//
//===----------------------------------------------------------------------===//
#include "tsan_flags.h"
#include "tsan_rtl.h"
#include "gtest/gtest.h"
namespace __tsan {
TEST(Flags, Basic) {
ScopedInRtl in_rtl;
// At least should not crash.
Flags f = {};
InitializeFlags(&f, 0);
InitializeFlags(&f, "");
}
TEST(Flags, ParseBool) {
ScopedInRtl in_rtl;
Flags f = {};
f.enable_annotations = false;
InitializeFlags(&f, "enable_annotations");
EXPECT_EQ(f.enable_annotations, true);
f.enable_annotations = false;
InitializeFlags(&f, "--enable_annotations");
EXPECT_EQ(f.enable_annotations, true);
f.enable_annotations = false;
InitializeFlags(&f, "--enable_annotations=1");
EXPECT_EQ(f.enable_annotations, true);
// This flag is false by default.
f.force_seq_cst_atomics = false;
InitializeFlags(&f, "--force_seq_cst_atomics=1");
EXPECT_EQ(f.force_seq_cst_atomics, true);
f.enable_annotations = true;
InitializeFlags(&f, "asdas enable_annotations=0 asdasd");
EXPECT_EQ(f.enable_annotations, false);
f.enable_annotations = true;
InitializeFlags(&f, " --enable_annotations=0 ");
EXPECT_EQ(f.enable_annotations, false);
}
TEST(Flags, ParseInt) {
ScopedInRtl in_rtl;
Flags f = {};
f.exitcode = -11;
InitializeFlags(&f, "exitcode");
EXPECT_EQ(f.exitcode, 0);
f.exitcode = -11;
InitializeFlags(&f, "--exitcode=");
EXPECT_EQ(f.exitcode, 0);
f.exitcode = -11;
InitializeFlags(&f, "--exitcode=42");
EXPECT_EQ(f.exitcode, 42);
f.exitcode = -11;
InitializeFlags(&f, "--exitcode=-42");
EXPECT_EQ(f.exitcode, -42);
}
TEST(Flags, ParseStr) {
ScopedInRtl in_rtl;
Flags f = {};
InitializeFlags(&f, 0);
EXPECT_EQ(0, strcmp(f.strip_path_prefix, ""));
InitializeFlags(&f, "strip_path_prefix");
EXPECT_EQ(0, strcmp(f.strip_path_prefix, ""));
InitializeFlags(&f, "--strip_path_prefix=");
EXPECT_EQ(0, strcmp(f.strip_path_prefix, ""));
InitializeFlags(&f, "--strip_path_prefix=abc");
EXPECT_EQ(0, strcmp(f.strip_path_prefix, "abc"));
InitializeFlags(&f, "--strip_path_prefix='abc zxc'");
EXPECT_EQ(0, strcmp(f.strip_path_prefix, "abc zxc"));
InitializeFlags(&f, "--strip_path_prefix=\"abc zxc\"");
EXPECT_EQ(0, strcmp(f.strip_path_prefix, "abc zxc"));
}
} // namespace __tsan