brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 6da06c3 Raw
153 lines · cpp
1//===-- Unittests for span ------------------------------------------------===//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 "src/__support/CPP/array.h"10#include "src/__support/CPP/span.h"11#include "test/UnitTest/Test.h"12 13using LIBC_NAMESPACE::cpp::array;14using LIBC_NAMESPACE::cpp::span;15 16TEST(LlvmLibcSpanTest, InitializeEmpty) {17  span<int> s;18  ASSERT_EQ(s.size(), size_t(0));19  ASSERT_TRUE(s.empty());20  ASSERT_TRUE(s.data() == nullptr);21}22 23TEST(LlvmLibcSpanTest, InitializeSingleton) {24  int a = 42;25  span<int> s(&a, 1);26  ASSERT_EQ(s.size(), size_t(1));27  ASSERT_FALSE(s.empty());28  ASSERT_TRUE(s.data() == &a);29  ASSERT_EQ(s.front(), 42);30  ASSERT_EQ(s.back(), 42);31}32 33TEST(LlvmLibcSpanTest, InitializeCArray) {34  int a[] = {1, 2, 3};35  span<int> s(a);36  ASSERT_EQ(s.size(), size_t(3));37  ASSERT_FALSE(s.empty());38  ASSERT_TRUE(s.data() == &a[0]);39  ASSERT_EQ(s.front(), 1);40  ASSERT_EQ(s.back(), 3);41  ASSERT_EQ(s[0], 1);42  ASSERT_EQ(s[1], 2);43  ASSERT_EQ(s[2], 3);44}45 46TEST(LlvmLibcSpanTest, InitializeArray) {47  array<int, 3> a = {1, 2, 3};48  span<int> s(a);49  ASSERT_EQ(s.size(), size_t(3));50  ASSERT_FALSE(s.empty());51  ASSERT_TRUE(s.data() == &a[0]);52  ASSERT_EQ(s.front(), 1);53  ASSERT_EQ(s.back(), 3);54  ASSERT_EQ(s[0], 1);55  ASSERT_EQ(s[1], 2);56  ASSERT_EQ(s[2], 3);57}58 59TEST(LlvmLibcSpanTest, InitializeViewFormMutableSingleton) {60  int a = 42;61  span<const int> s(&a, 1);62  ASSERT_EQ(s.size(), size_t(1));63  ASSERT_TRUE(s.data() == &a);64}65 66TEST(LlvmLibcSpanTest, InitializeViewFormMutableCArray) {67  int a[] = {1, 2, 3};68  span<const int> s(a);69  ASSERT_EQ(s.size(), size_t(3));70  ASSERT_EQ(s[0], 1);71  ASSERT_EQ(s[1], 2);72  ASSERT_EQ(s[2], 3);73}74 75TEST(LlvmLibcSpanTest, InitializeViewFormMutableArray) {76  array<int, 3> a = {1, 2, 3};77  span<const int> s(a);78  ASSERT_EQ(s.size(), size_t(3));79  ASSERT_EQ(s[0], 1);80  ASSERT_EQ(s[1], 2);81  ASSERT_EQ(s[2], 3);82}83 84TEST(LlvmLibcSpanTest, InitializeFromMutable) {85  span<int> s;86  span<const int> view(s);87  (void)view;88}89 90TEST(LlvmLibcSpanTest, Assign) {91  span<int> s;92  span<int> other;93  other = s;94}95 96TEST(LlvmLibcSpanTest, AssignFromMutable) {97  span<int> s;98  span<const int> view;99  view = s;100}101 102TEST(LlvmLibcSpanTest, Modify) {103  int a[] = {1, 2, 3};104  span<int> s(a);105  for (int &value : s)106    ++value;107  ASSERT_EQ(s.size(), size_t(3));108  ASSERT_EQ(s[0], 2);109  ASSERT_EQ(s[1], 3);110  ASSERT_EQ(s[2], 4);111}112 113TEST(LlvmLibcSpanTest, SubSpan) {114  int a[] = {1, 2, 3};115  span<const int> s(a);116  { // same span117    const auto _ = s.subspan(0);118    ASSERT_EQ(_.size(), size_t(3));119    ASSERT_EQ(_[0], 1);120    ASSERT_EQ(_[1], 2);121    ASSERT_EQ(_[2], 3);122  }123  { // last element124    const auto _ = s.subspan(2);125    ASSERT_EQ(_.size(), size_t(1));126    ASSERT_EQ(_[0], 3);127  }128  { // no element129    const auto _ = s.subspan(3);130    ASSERT_EQ(_.size(), size_t(0));131  }132  { // first element133    const auto _ = s.subspan(0, 1);134    ASSERT_EQ(_.size(), size_t(1));135    ASSERT_EQ(_[0], 1);136  }137}138 139TEST(LlvmLibcSpanTest, FirstAndLastSubSpan) {140  int a[] = {1, 2, 3};141  span<const int> s(a);142 143  const auto first = s.first(2);144  ASSERT_EQ(first.size(), size_t(2));145  ASSERT_EQ(first[0], 1);146  ASSERT_EQ(first[1], 2);147 148  const auto last = s.last(2);149  ASSERT_EQ(last.size(), size_t(2));150  ASSERT_EQ(last[0], 2);151  ASSERT_EQ(last[1], 3);152}153