diff options
author | Rui Ueyama <ruiu@google.com> | 2016-02-28 04:03:01 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2016-02-28 04:03:01 +0000 |
commit | cb9aa4274a9a20ec843345e0c9bf470b11c4ca41 (patch) | |
tree | ca28773e223f2eaba819b61cc92d222f15aec530 /lld/unittests | |
parent | 357dea6b23508f7d0df69897f2328dc061a26bdf (diff) |
Remove lld/Core/range.h.
IIUC, range was an experiment to see how N3350 would work in LLD.
It turned out it didn't get traction, and it is basically duplicate
of iterator_range in ADT. We have only two occurrences of range,
and all of them are easily rewritten without it.
http://reviews.llvm.org/D17687
Diffstat (limited to 'lld/unittests')
-rw-r--r-- | lld/unittests/CoreTests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | lld/unittests/CoreTests/RangeTest.cpp | 240 |
2 files changed, 0 insertions, 241 deletions
diff --git a/lld/unittests/CoreTests/CMakeLists.txt b/lld/unittests/CoreTests/CMakeLists.txt index aa85617916b..4bda2b06d5b 100644 --- a/lld/unittests/CoreTests/CMakeLists.txt +++ b/lld/unittests/CoreTests/CMakeLists.txt @@ -1,4 +1,3 @@ add_lld_unittest(CoreTests ParallelTest.cpp - RangeTest.cpp ) diff --git a/lld/unittests/CoreTests/RangeTest.cpp b/lld/unittests/CoreTests/RangeTest.cpp deleted file mode 100644 index 2b2fcd5f787..00000000000 --- a/lld/unittests/CoreTests/RangeTest.cpp +++ /dev/null @@ -1,240 +0,0 @@ -//===- lld/unittest/RangeTest.cpp -----------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -/// -/// \file -/// \brief range.h unit tests. -/// -//===----------------------------------------------------------------------===// - -#include "gtest/gtest.h" -#include "lld/Core/range.h" -#include <array> -#include <assert.h> -#include <deque> -#include <forward_list> -#include <iterator> -#include <list> -#include <numeric> -#include <sstream> -#include <vector> - -template <typename T, typename U> struct AssertTypesSame; -template <typename T> struct AssertTypesSame<T, T> {}; -#define ASSERT_TYPES_SAME(T, U) AssertTypesSame<T, U>() - -struct no_begin {}; -struct member_begin { - int *begin(); -}; -struct free_begin {}; -int *begin(free_begin); - -template <typename T> -auto type_of_forward(T &&t) -> decltype(std::forward<T>(t)) { - return std::forward<T>(t); -} - -template <typename To> To implicit_cast(To val) { return val; } - -void test_traits() { - using namespace lld::detail; - ASSERT_TYPES_SAME(begin_result<no_begin>::type, undefined); - // This causes clang to segfault. -#if 0 - ASSERT_TYPES_SAME( - begin_result<decltype(type_of_forward(member_begin()))>::type, int *); -#endif - ASSERT_TYPES_SAME(begin_result<free_begin>::type, int *); -} - -TEST(Range, constructors) { - std::vector<int> v(5); - std::iota(v.begin(), v.end(), 0); - lld::range<std::vector<int>::iterator> r = v; - EXPECT_EQ(v.begin(), r.begin()); - EXPECT_EQ(v.end(), r.end()); - - int arr[] = { 1, 2, 3, 4, 5 }; - std::begin(arr); - lld::range<int *> r2 = arr; - EXPECT_EQ(5, r2.back()); -} - -TEST(Range, conversion_to_pointer_range) { - std::vector<int> v(5); - std::iota(v.begin(), v.end(), 0); - lld::range<int *> r = v; - EXPECT_EQ(&*v.begin(), r.begin()); - EXPECT_EQ(2, r[2]); -} - -template <typename Iter> void takes_range(lld::range<Iter> r) { - int expected = 0; - for (int val : r) { - EXPECT_EQ(expected++, val); - } -} - -void takes_ptr_range(lld::range<const int *> r) { - int expected = 0; - for (int val : r) { - EXPECT_EQ(expected++, val); - } -} - -TEST(Range, passing) { - using lld::make_range; - using lld::make_ptr_range; - std::list<int> l(5); - std::iota(l.begin(), l.end(), 0); - takes_range(make_range(l)); - takes_range(make_range(implicit_cast<const std::list<int> &>(l))); - std::deque<int> d(5); - std::iota(d.begin(), d.end(), 0); - takes_range(make_range(d)); - takes_range(make_range(implicit_cast<const std::deque<int> &>(d))); - std::vector<int> v(5); - std::iota(v.begin(), v.end(), 0); - takes_range(make_range(v)); - takes_range(make_range(implicit_cast<const std::vector<int> &>(v))); - static_assert( - std::is_same<decltype(make_ptr_range(v)), lld::range<int *>>::value, - "make_ptr_range should return a range of pointers"); - takes_range(make_ptr_range(v)); - takes_range(make_ptr_range(implicit_cast<const std::vector<int> &>(v))); - int arr[] = { 0, 1, 2, 3, 4 }; - takes_range(make_range(arr)); - const int carr[] = { 0, 1, 2, 3, 4 }; - takes_range(make_range(carr)); - - takes_ptr_range(v); - takes_ptr_range(implicit_cast<const std::vector<int> &>(v)); - takes_ptr_range(arr); - takes_ptr_range(carr); -} - -TEST(Range, access) { - std::array<int, 5> a = { { 1, 2, 3, 4, 5 } }; - lld::range<decltype(a.begin())> r = a; - EXPECT_EQ(4, r[3]); - EXPECT_EQ(4, r[-2]); -} - -template <bool b> struct CompileAssert; -template <> struct CompileAssert<true> {}; - -#if __has_feature(cxx_constexpr) -constexpr int arr[] = { 1, 2, 3, 4, 5 }; -TEST(Range, constexpr) { - constexpr lld::range<const int *> r(arr, arr + 5); - CompileAssert<r.front() == 1>(); - CompileAssert<r.size() == 5>(); - CompileAssert<r[4] == 5>(); -} -#endif - -template <typename Container> void test_slice() { - Container cont(10); - std::iota(cont.begin(), cont.end(), 0); - lld::range<decltype(cont.begin())> r = cont; - - // One argument. - EXPECT_EQ(10, r.slice(0).size()); - EXPECT_EQ(8, r.slice(2).size()); - EXPECT_EQ(2, r.slice(2).front()); - EXPECT_EQ(1, r.slice(-1).size()); - EXPECT_EQ(9, r.slice(-1).front()); - - // Two positive arguments. - EXPECT_TRUE(r.slice(5, 2).empty()); - EXPECT_EQ(next(cont.begin(), 5), r.slice(5, 2).begin()); - EXPECT_EQ(1, r.slice(1, 2).size()); - EXPECT_EQ(1, r.slice(1, 2).front()); - - // Two negative arguments. - EXPECT_TRUE(r.slice(-2, -5).empty()); - EXPECT_EQ(next(cont.begin(), 8), r.slice(-2, -5).begin()); - EXPECT_EQ(1, r.slice(-2, -1).size()); - EXPECT_EQ(8, r.slice(-2, -1).front()); - - // Positive start, negative stop. - EXPECT_EQ(1, r.slice(6, -3).size()); - EXPECT_EQ(6, r.slice(6, -3).front()); - EXPECT_TRUE(r.slice(6, -5).empty()); - EXPECT_EQ(next(cont.begin(), 6), r.slice(6, -5).begin()); - - // Negative start, positive stop. - EXPECT_TRUE(r.slice(-3, 6).empty()); - EXPECT_EQ(next(cont.begin(), 7), r.slice(-3, 6).begin()); - EXPECT_EQ(1, r.slice(-5, 6).size()); - EXPECT_EQ(5, r.slice(-5, 6).front()); -} - -TEST(Range, slice) { - // -fsanitize=undefined complains about this, but only if optimizations are - // enabled. -#if 0 - test_slice<std::forward_list<int>>(); -#endif - test_slice<std::list<int>>(); -// This doesn't build with libstdc++ 4.7 -#if 0 - test_slice<std::deque<int>>(); -#endif -} - -// This test is flaky and I've yet to pin down why. Changing between -// EXPECT_EQ(1, input.front()) and EXPECT_TRUE(input.front() == 1) makes it work -// with VS 2012 in Debug mode. Clang on Linux seems to fail with -03 and -02 -g -// -fsanitize=undefined. -#if 0 -TEST(Range, istream_range) { - std::istringstream stream("1 2 3 4 5"); - // MSVC interprets input as a function declaration if you don't declare start - // and instead directly pass std::istream_iterator<int>(stream). - auto start = std::istream_iterator<int>(stream); - lld::range<std::istream_iterator<int>> input( - start, std::istream_iterator<int>()); - EXPECT_TRUE(input.front() == 1); - input.pop_front(); - EXPECT_TRUE(input.front() == 2); - input.pop_front(2); - EXPECT_TRUE(input.front() == 4); - input.pop_front_upto(7); - EXPECT_TRUE(input.empty()); -} -#endif - -//! [algorithm using range] -template <typename T> void partial_sum(T &container) { - using lld::make_range; - auto range = make_range(container); - typename T::value_type sum = 0; - // One would actually use a range-based for loop - // in this case, but you get the idea: - for (; !range.empty(); range.pop_front()) { - sum += range.front(); - range.front() = sum; - } -} - -TEST(Range, user1) { - std::vector<int> v(5, 2); - partial_sum(v); - EXPECT_EQ(8, v[3]); -} -//! [algorithm using range] - -//! [algorithm using ptr_range] -void my_write(int fd, lld::range<const char *> buffer) {} - -TEST(Range, user2) { - std::string s("Hello world"); - my_write(1, s); -} |