[libc][test] Remove dependency on sstream in algorithm_test.cpp

Bots have been failing in full build mode because ´#include <sstream>´ would pull pthread which is not possible when code is compiled with ´-freestanding´.

Differential Revision: https://reviews.llvm.org/D128809
This commit is contained in:
Guillaume Chatelet 2022-06-29 12:28:00 +00:00
parent 0fb24a85cb
commit 292b281caf
2 changed files with 40 additions and 10 deletions

View File

@ -4,7 +4,7 @@ add_libc_unittest(
libc_string_unittests
SRCS
address_test.cpp
# algorithm_test.cpp
algorithm_test.cpp
backend_test.cpp
elements_test.cpp
memory_access_test.cpp
@ -12,7 +12,6 @@ add_libc_unittest(
COMPILE_OPTIONS
${LIBC_COMPILE_OPTIONS_NATIVE}
-ffreestanding
-pthread
DEPENDS
libc.src.string.memory_utils.memory_utils
libc.src.__support.CPP.array

View File

@ -6,7 +6,9 @@
#include <src/string/memory_utils/algorithm.h>
#include <src/string/memory_utils/backends.h>
#include <sstream>
#include <string>
#include <type_traits>
#include <vector>
namespace __llvm_libc {
@ -23,7 +25,26 @@ struct alignas(64) Buffer : cpp::Array<char, 128> {
static Buffer buffer1;
static Buffer buffer2;
static std::ostringstream LOG;
struct Logger {
Logger &operator<<(const char *str) {
Buffer.append(str);
return *this;
}
Logger &operator<<(char c) {
Buffer.push_back(c);
return *this;
}
template <typename Scalar>
std::enable_if_t<std::is_integral<Scalar>::value, Logger &>
operator<<(Scalar number) {
Buffer.append(std::to_string(number));
return *this;
}
const std::string &str() const { return Buffer; }
private:
std::string Buffer;
} LOG;
struct TestBackend {
static constexpr bool IS_BACKEND_TYPE = true;
@ -72,7 +93,7 @@ struct TestBackend {
struct LlvmLibcAlgorithm : public testing::Test {
void SetUp() override {
LOG = std::ostringstream();
LOG = Logger();
LOG << '\n';
}
@ -91,11 +112,20 @@ struct LlvmLibcAlgorithm : public testing::Test {
return trace_.c_str();
}
const char *stripComments(const char *expected) {
const char *stripComments(std::string expected) {
expected_.clear();
std::stringstream ss(expected);
std::string line;
while (std::getline(ss, line, '\n')) {
// split expected by lines
std::vector<std::string> lines;
lines.emplace_back();
for (const char c : expected) {
if (c == '\n') {
lines.emplace_back();
} else {
lines.back().push_back(c);
}
}
// strip comment for each lines
for (const std::string &line : lines) {
const auto pos = line.find('#');
if (pos == std::string::npos) {
expected_ += line;
@ -105,7 +135,8 @@ struct LlvmLibcAlgorithm : public testing::Test {
log.pop_back();
expected_ += log;
}
expected_ += '\n';
if (expected_.back() != '\n')
expected_.push_back('\n');
}
return expected_.c_str();
}