1*679d9ea1SVitaly Buka //===-- sanitizer_region_test.cpp -----------------------------------------===//
2*679d9ea1SVitaly Buka //
3*679d9ea1SVitaly Buka // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*679d9ea1SVitaly Buka // See https://llvm.org/LICENSE.txt for license information.
5*679d9ea1SVitaly Buka // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*679d9ea1SVitaly Buka //
7*679d9ea1SVitaly Buka //===----------------------------------------------------------------------===//
8*679d9ea1SVitaly Buka #include "sanitizer_common/sanitizer_range.h"
9*679d9ea1SVitaly Buka
10*679d9ea1SVitaly Buka #include <algorithm>
11*679d9ea1SVitaly Buka
12*679d9ea1SVitaly Buka #include "gtest/gtest.h"
13*679d9ea1SVitaly Buka #include "sanitizer_common/sanitizer_common.h"
14*679d9ea1SVitaly Buka
15*679d9ea1SVitaly Buka namespace __sanitizer {
16*679d9ea1SVitaly Buka
17*679d9ea1SVitaly Buka class SanitizerCommon
18*679d9ea1SVitaly Buka : public testing::TestWithParam<std::tuple<
19*679d9ea1SVitaly Buka std::vector<Range>, std::vector<Range>, std::vector<Range>>> {};
20*679d9ea1SVitaly Buka
TEST_P(SanitizerCommon,Intersect)21*679d9ea1SVitaly Buka TEST_P(SanitizerCommon, Intersect) {
22*679d9ea1SVitaly Buka {
23*679d9ea1SVitaly Buka InternalMmapVector<Range> output;
24*679d9ea1SVitaly Buka Intersect(std::get<0>(GetParam()), std::get<1>(GetParam()), output);
25*679d9ea1SVitaly Buka EXPECT_EQ(std::get<2>(GetParam()),
26*679d9ea1SVitaly Buka std::vector<Range>(output.begin(), output.end()));
27*679d9ea1SVitaly Buka }
28*679d9ea1SVitaly Buka {
29*679d9ea1SVitaly Buka InternalMmapVector<Range> output;
30*679d9ea1SVitaly Buka Intersect(std::get<1>(GetParam()), std::get<0>(GetParam()), output);
31*679d9ea1SVitaly Buka EXPECT_EQ(std::get<2>(GetParam()),
32*679d9ea1SVitaly Buka std::vector<Range>(output.begin(), output.end()));
33*679d9ea1SVitaly Buka }
34*679d9ea1SVitaly Buka }
35*679d9ea1SVitaly Buka
PrintTo(const Range & r,std::ostream * os)36*679d9ea1SVitaly Buka static void PrintTo(const Range &r, std::ostream *os) {
37*679d9ea1SVitaly Buka *os << "[" << r.begin << ", " << r.end << ")";
38*679d9ea1SVitaly Buka }
39*679d9ea1SVitaly Buka
40*679d9ea1SVitaly Buka static const std::tuple<std::vector<Range>, std::vector<Range>,
41*679d9ea1SVitaly Buka std::vector<Range>>
42*679d9ea1SVitaly Buka kTests[] = {
43*679d9ea1SVitaly Buka {{}, {}, {}},
44*679d9ea1SVitaly Buka {{{100, 1000}}, {{5000, 10000}}, {}},
45*679d9ea1SVitaly Buka {{{100, 1000}, {200, 2000}}, {{5000, 10000}, {6000, 11000}}, {}},
46*679d9ea1SVitaly Buka {{{100, 1000}}, {{100, 1000}}, {{100, 1000}}},
47*679d9ea1SVitaly Buka {{{100, 1000}}, {{50, 150}}, {{100, 150}}},
48*679d9ea1SVitaly Buka {{{100, 1000}}, {{150, 250}}, {{150, 250}}},
49*679d9ea1SVitaly Buka {{{100, 1000}, {100, 1000}}, {{100, 1000}}, {{100, 1000}}},
50*679d9ea1SVitaly Buka {{{100, 1000}}, {{500, 1500}}, {{500, 1000}}},
51*679d9ea1SVitaly Buka {{{100, 200}}, {{200, 300}, {1, 1000}}, {{100, 200}}},
52*679d9ea1SVitaly Buka {{{100, 200}, {200, 300}}, {{100, 300}}, {{100, 300}}},
53*679d9ea1SVitaly Buka {{{100, 200}, {200, 300}, {300, 400}}, {{150, 350}}, {{150, 350}}},
54*679d9ea1SVitaly Buka {{{100, 200}, {300, 400}, {500, 600}},
55*679d9ea1SVitaly Buka {{0, 1000}},
56*679d9ea1SVitaly Buka {{100, 200}, {300, 400}, {500, 600}}},
57*679d9ea1SVitaly Buka };
58*679d9ea1SVitaly Buka
59*679d9ea1SVitaly Buka INSTANTIATE_TEST_SUITE_P(SanitizerCommonEmpty, SanitizerCommon,
60*679d9ea1SVitaly Buka testing::ValuesIn(kTests));
61*679d9ea1SVitaly Buka
62*679d9ea1SVitaly Buka } // namespace __sanitizer
63