1 //===- llvm/unittest/IR/DebugInfo.cpp - DebugInfo tests -------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm/IR/DebugInfo.h" 11 #include "gtest/gtest.h" 12 13 using namespace llvm; 14 15 namespace llvm { 16 17 static void PrintTo(const StringRef &S, ::std::ostream *os) { 18 *os << "(" << (void *)S.data() << "," << S.size() << ") = '"; 19 for (auto C : S) 20 if (C) 21 *os << C; 22 else 23 *os << "\\00"; 24 *os << "'"; 25 } 26 static void PrintTo(const DIHeaderFieldIterator &I, ::std::ostream *os) { 27 PrintTo(I.getCurrent(), os); 28 *os << " in "; 29 PrintTo(I.getHeader(), os); 30 } 31 32 } // end namespace llvm 33 34 namespace { 35 36 #define MAKE_FIELD_ITERATOR(S) \ 37 DIHeaderFieldIterator(StringRef(S, sizeof(S) - 1)) 38 TEST(DebugInfoTest, DIHeaderFieldIterator) { 39 ASSERT_EQ(DIHeaderFieldIterator(), DIHeaderFieldIterator()); 40 41 ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR("")); 42 ASSERT_EQ(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR("")); 43 ASSERT_EQ("", *DIHeaderFieldIterator("")); 44 45 ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR("stuff")); 46 ASSERT_EQ(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR("stuff")); 47 ASSERT_EQ("stuff", *DIHeaderFieldIterator("stuff")); 48 49 ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR("st\0uff")); 50 ASSERT_NE(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR("st\0uff")); 51 ASSERT_EQ(DIHeaderFieldIterator(), ++++MAKE_FIELD_ITERATOR("st\0uff")); 52 ASSERT_EQ("st", *MAKE_FIELD_ITERATOR("st\0uff")); 53 ASSERT_EQ("uff", *++MAKE_FIELD_ITERATOR("st\0uff")); 54 55 ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR("stuff\0")); 56 ASSERT_NE(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR("stuff\0")); 57 ASSERT_EQ(DIHeaderFieldIterator(), ++++MAKE_FIELD_ITERATOR("stuff\0")); 58 ASSERT_EQ("stuff", *MAKE_FIELD_ITERATOR("stuff\0")); 59 ASSERT_EQ("", *++MAKE_FIELD_ITERATOR("stuff\0")); 60 61 ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR("\0stuff")); 62 ASSERT_NE(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR("\0stuff")); 63 ASSERT_EQ(DIHeaderFieldIterator(), ++++MAKE_FIELD_ITERATOR("\0stuff")); 64 ASSERT_EQ("", *MAKE_FIELD_ITERATOR("\0stuff")); 65 ASSERT_EQ("stuff", *++MAKE_FIELD_ITERATOR("\0stuff")); 66 } 67 68 } // end namespace 69