1 //===-- adt_test.cpp ------------------------------------------------------===// 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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file is a part of the ORC runtime. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "adt.h" 14 #include "gtest/gtest.h" 15 16 using namespace __orc_rt; 17 18 TEST(ADTTest, SpanDefaultConstruction) { 19 span<int> S; 20 EXPECT_TRUE(S.empty()) << "Default constructed span not empty"; 21 EXPECT_EQ(S.size(), 0U) << "Default constructed span size not zero"; 22 EXPECT_EQ(S.begin(), S.end()) << "Default constructed span begin != end"; 23 } 24 25 TEST(ADTTest, SpanConstructFromFixedArray) { 26 int A[] = {1, 2, 3, 4, 5}; 27 span<int> S(A); 28 EXPECT_FALSE(S.empty()) << "Span should be non-empty"; 29 EXPECT_EQ(S.size(), 5U) << "Span has unexpected size"; 30 EXPECT_EQ(std::distance(S.begin(), S.end()), 5U) 31 << "Unexpected iterator range size"; 32 EXPECT_EQ(S.data(), &A[0]) << "Span data has unexpected value"; 33 for (unsigned I = 0; I != S.size(); ++I) 34 EXPECT_EQ(S[I], A[I]) << "Unexpected span element value"; 35 } 36 37 TEST(ADTTest, SpanConstructFromIteratorAndSize) { 38 int A[] = {1, 2, 3, 4, 5}; 39 span<int> S(&A[0], 5); 40 EXPECT_FALSE(S.empty()) << "Span should be non-empty"; 41 EXPECT_EQ(S.size(), 5U) << "Span has unexpected size"; 42 EXPECT_EQ(std::distance(S.begin(), S.end()), 5U) 43 << "Unexpected iterator range size"; 44 EXPECT_EQ(S.data(), &A[0]) << "Span data has unexpected value"; 45 for (unsigned I = 0; I != S.size(); ++I) 46 EXPECT_EQ(S[I], A[I]) << "Unexpected span element value"; 47 } 48 49 TEST(ADTTest, StringViewDefaultConstruction) { 50 string_view S; 51 EXPECT_TRUE(S.empty()) << "Default constructed span not empty"; 52 EXPECT_EQ(S.size(), 0U) << "Default constructed span size not zero"; 53 EXPECT_EQ(S.begin(), S.end()) << "Default constructed span begin != end"; 54 } 55 56 TEST(ADTTest, StringViewConstructFromCharPtrAndSize) { 57 const char *Str = "abcdefg"; 58 string_view S(Str, 5); 59 EXPECT_FALSE(S.empty()) << "Span should be non-empty"; 60 EXPECT_EQ(S.size(), 5U) << "Span has unexpected size"; 61 EXPECT_EQ(std::distance(S.begin(), S.end()), 5U) 62 << "Unexpected iterator range size"; 63 EXPECT_EQ(S.data(), &Str[0]) << "Span data has unexpected value"; 64 for (unsigned I = 0; I != S.size(); ++I) 65 EXPECT_EQ(S[I], Str[I]) << "Unexpected span element value"; 66 } 67 68 TEST(ADTTest, StringViewConstructFromCharPtr) { 69 const char *Str = "abcdefg"; 70 size_t StrLen = strlen(Str); 71 string_view S(Str); 72 73 EXPECT_FALSE(S.empty()) << "Span should be non-empty"; 74 EXPECT_EQ(S.size(), StrLen) << "Span has unexpected size"; 75 EXPECT_EQ(static_cast<size_t>(std::distance(S.begin(), S.end())), StrLen) 76 << "Unexpected iterator range size"; 77 EXPECT_EQ(S.data(), &Str[0]) << "Span data has unexpected value"; 78 for (unsigned I = 0; I != S.size(); ++I) 79 EXPECT_EQ(S[I], Str[I]) << "Unexpected span element value"; 80 } 81 82 TEST(ADTTest, StringViewEquality) { 83 EXPECT_EQ("", string_view()); 84 EXPECT_FALSE(string_view("aab") == string_view("aac")); 85 EXPECT_FALSE(string_view("aab") != string_view("aab")); 86 EXPECT_NE(string_view("aab"), string_view("aac")); 87 } 88