| //===- llvm/tools/gollvm/unittests/TestUtils/DiffUtils.h --------------===// |
| // |
| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef GOLLVM_UNITTESTS_TESTUTILS_DIFFUTILS_H |
| #define GOLLVM_UNITTESTS_TESTUTILS_DIFFUTILS_H |
| |
| #include <string> |
| #include <vector> |
| |
| #define RAW_RESULT(x) #x |
| #define RAW_INPUT(x) #x |
| |
| struct ExpectedDump { |
| ExpectedDump(const char *c, const char *f, int l) : |
| content(c), file(f), line(l) { } |
| const char *content; |
| const char *file; |
| int line; |
| }; |
| |
| #define DECLARE_EXPECTED_OUTPUT(vname, x) \ |
| ExpectedDump vname(x, __FILE__, __LINE__) |
| |
| namespace goBackendUnitTests { |
| |
| // Trim leading and trailing spaces |
| std::string trimsp(const std::string &s); |
| |
| // Split specified string into tokens (with whitespace as delimiter) |
| std::vector<std::string> tokenize(const std::string &s); |
| |
| // Join together vector of strings to single string, separate with spaces |
| std::string vectostr(const std::vector<std::string> &tv); |
| |
| // Tokenize the two strings, then diff the resulting token vectors, |
| // returning TRUE if they are identical or FALSE if different (and |
| // setting 'diffreason' to explanation of diff) |
| bool difftokens(const std::string &expected, |
| const std::string &result, |
| std::string &diffreason); |
| |
| // Return TRUE if string 'text' contains instead of string 'pat'. |
| // Tokenizes both strings to avoid whitespace differences |
| bool containstokens(const std::string &text, const std::string &pat); |
| |
| // Return the number of instances of 'pat' within 'text'. Both the pattern |
| // and the text are tokenized prior to the search. Search is brute-force. |
| unsigned countinstances(const std::string &text, const std::string &pat); |
| |
| // Issue an error message to std:cerr to report the fact that the expected dump |
| // in 'ed' does not match the actual dump in 'actual'. Depending on environment |
| // variable settings, may also emit dump files and/or remaster script. |
| void complainOnNequal(const std::string &reason, |
| const ExpectedDump &ed, |
| const std::string &actual); |
| |
| } |
| |
| #endif // GOLLVM_UNITTESTS_TESTUTILS_DIFFUTILS_H |