Add output string streams to NXT test expectation helpers

This commit is contained in:
Austin Eng 2017-07-17 09:37:08 -04:00 committed by Austin Eng
parent 59dc03f101
commit 4234c39a09
2 changed files with 19 additions and 10 deletions

View File

@ -150,7 +150,7 @@ void NXTTest::TearDown() {
}
}
void NXTTest::AddBufferExpectation(const char* file, int line, const nxt::Buffer& buffer, uint32_t offset, uint32_t size, detail::Expectation* expectation) {
std::ostringstream& NXTTest::AddBufferExpectation(const char* file, int line, const nxt::Buffer& buffer, uint32_t offset, uint32_t size, detail::Expectation* expectation) {
nxt::Buffer source = buffer.Clone();
auto readback = ReserveReadback(size);
@ -175,10 +175,12 @@ void NXTTest::AddBufferExpectation(const char* file, int line, const nxt::Buffer
deferred.rowPitch = size;
deferred.expectation = expectation;
deferredExpectations.push_back(deferred);
deferredExpectations.push_back(std::move(deferred));
deferredExpectations.back().message = std::make_unique<std::ostringstream>();
return *(deferredExpectations.back().message.get());
}
void NXTTest::AddTextureExpectation(const char* file, int line, const nxt::Texture& texture, uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint32_t pixelSize, detail::Expectation* expectation) {
std::ostringstream& NXTTest::AddTextureExpectation(const char* file, int line, const nxt::Texture& texture, uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint32_t pixelSize, detail::Expectation* expectation) {
nxt::Texture source = texture.Clone();
uint32_t rowPitch = Align(width * pixelSize, kTextureRowPitchAlignment);
uint32_t size = rowPitch * (height - 1) + width * pixelSize;
@ -205,7 +207,9 @@ void NXTTest::AddTextureExpectation(const char* file, int line, const nxt::Textu
deferred.rowPitch = rowPitch;
deferred.expectation = expectation;
deferredExpectations.push_back(deferred);
deferredExpectations.push_back(std::move(deferred));
deferredExpectations.back().message = std::make_unique<std::ostringstream>();
return *(deferredExpectations.back().message.get());
}
void NXTTest::WaitABit() {
@ -296,7 +300,8 @@ void NXTTest::ResolveExpectations() {
// Get the result for the expectation and add context to failures
testing::AssertionResult result = expectation.expectation->Check(data, size);
if (!result) {
result << " Expectation created at " << expectation.file << ":" << expectation.line;
result << " Expectation created at " << expectation.file << ":" << expectation.line << std::endl;
result << expectation.message->str();
}
EXPECT_TRUE(result);

View File

@ -15,19 +15,20 @@
#include "nxt/nxtcpp.h"
#include <gtest/gtest.h>
#include <memory>
// Getting data back from NXT is done in an async manners so all expectations are "deferred"
// until the end of the test. Also expectations use a copy to a MapRead buffer to get the data
// so resources should have the TransferSrc allowed usage bit if you want to add expectations on them.
#define EXPECT_BUFFER_U32_EQ(expected, buffer, offset) \
AddBufferExpectation(__FILE__, __LINE__, buffer, offset, sizeof(uint32_t), new detail::ExpectEq<uint32_t>(expected));
AddBufferExpectation(__FILE__, __LINE__, buffer, offset, sizeof(uint32_t), new detail::ExpectEq<uint32_t>(expected))
#define EXPECT_BUFFER_U32_RANGE_EQ(expected, buffer, offset, count) \
AddBufferExpectation(__FILE__, __LINE__, buffer, offset, sizeof(uint32_t) * count, new detail::ExpectEq<uint32_t>(expected, count));
AddBufferExpectation(__FILE__, __LINE__, buffer, offset, sizeof(uint32_t) * count, new detail::ExpectEq<uint32_t>(expected, count))
// Test a pixel of the mip level 0 of a 2D texture.
#define EXPECT_PIXEL_RGBA8_EQ(expected, texture, x, y) \
AddTextureExpectation(__FILE__, __LINE__, texture, x, y, 1, 1, sizeof(RGBA8), new detail::ExpectEq<RGBA8>(expected));
AddTextureExpectation(__FILE__, __LINE__, texture, x, y, 1, 1, sizeof(RGBA8), new detail::ExpectEq<RGBA8>(expected))
struct RGBA8 {
constexpr RGBA8(uint8_t r, uint8_t g, uint8_t b, uint8_t a): r(r), g(g), b(b), a(a) {
@ -74,8 +75,8 @@ class NXTTest : public ::testing::TestWithParam<BackendType> {
nxt::Queue queue;
// Helper methods to implement the EXPECT_ macros
void AddBufferExpectation(const char* file, int line, const nxt::Buffer& buffer, uint32_t offset, uint32_t size, detail::Expectation* expectation);
void AddTextureExpectation(const char* file, int line, const nxt::Texture& texture, uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint32_t pixelSize, detail::Expectation* expectation);
std::ostringstream& AddBufferExpectation(const char* file, int line, const nxt::Buffer& buffer, uint32_t offset, uint32_t size, detail::Expectation* expectation);
std::ostringstream& AddTextureExpectation(const char* file, int line, const nxt::Texture& texture, uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint32_t pixelSize, detail::Expectation* expectation);
void WaitABit();
void SwapBuffers();
@ -111,6 +112,9 @@ class NXTTest : public ::testing::TestWithParam<BackendType> {
uint32_t rowBytes;
uint32_t rowPitch;
detail::Expectation* expectation;
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54316
// Use unique_ptr because of missing move/copy constructors on std::basic_ostringstream
std::unique_ptr<std::ostringstream> message;
};
std::vector<DeferredExpectation> deferredExpectations;