64 lines · cpp
1//===- IndexedAccessorTest.cpp - Indexed Accessor Tests -------------------===//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#include "llvm/ADT/ArrayRef.h"10#include "llvm/ADT/STLExtras.h"11#include "gmock/gmock.h"12 13using namespace llvm;14using namespace llvm::detail;15 16namespace {17/// Simple indexed accessor range that wraps an array.18template <typename T>19struct ArrayIndexedAccessorRange20 : public indexed_accessor_range<ArrayIndexedAccessorRange<T>, T *, T> {21 ArrayIndexedAccessorRange(T *data, ptrdiff_t start, ptrdiff_t numElements)22 : indexed_accessor_range<ArrayIndexedAccessorRange<T>, T *, T>(23 data, start, numElements) {}24 using indexed_accessor_range<ArrayIndexedAccessorRange<T>, T *,25 T>::indexed_accessor_range;26 27 /// See `llvm::indexed_accessor_range` for details.28 static T &dereference(T *data, ptrdiff_t index) { return data[index]; }29};30} // end anonymous namespace31 32template <typename T>33static void compareData(ArrayIndexedAccessorRange<T> range,34 ArrayRef<T> referenceData) {35 ASSERT_EQ(referenceData.size(), range.size());36 ASSERT_TRUE(std::equal(range.begin(), range.end(), referenceData.begin()));37}38 39namespace {40TEST(AccessorRange, SliceTest) {41 int rawData[] = {0, 1, 2, 3, 4};42 ArrayRef<int> data = llvm::ArrayRef(rawData);43 44 ArrayIndexedAccessorRange<int> range(rawData, /*start=*/0, /*numElements=*/5);45 compareData(range, data);46 compareData(range.slice(2, 3), data.slice(2, 3));47 compareData(range.slice(0, 5), data.slice(0, 5));48}49 50TEST(AccessorRange, EqualTest) {51 int32_t rawData1[] = {0, 1, 2, 3, 4};52 uint64_t rawData2[] = {0, 1, 2, 3, 4};53 54 ArrayIndexedAccessorRange<int32_t> range1(rawData1, /*start=*/0,55 /*numElements=*/5);56 ArrayIndexedAccessorRange<uint64_t> range2(rawData2, /*start=*/0,57 /*numElements=*/5);58 EXPECT_TRUE(range1 == range2);59 EXPECT_FALSE(range1 != range2);60 EXPECT_TRUE(range2 == range1);61 EXPECT_FALSE(range2 != range1);62}63} // end anonymous namespace64