| // |
| // Copyright 2022 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // AstcDecompressor_unittest.cpp: Unit tests for AstcDecompressor |
| |
| #include <gmock/gmock.h> |
| #include <vector> |
| |
| #include "common/WorkerThread.h" |
| #include "image_util/AstcDecompressor.h" |
| #include "image_util/AstcDecompressorTestUtils.h" |
| |
| using namespace angle; |
| using namespace testing; |
| |
| namespace |
| { |
| |
| // Test that we can correctly decompress an image |
| TEST(AstcDecompressor, Decompress) |
| { |
| const int width = 1024; |
| const int height = 1024; |
| |
| auto singleThreadedPool = WorkerThreadPool::Create(1, ANGLEPlatformCurrent()); |
| auto multiThreadedPool = WorkerThreadPool::Create(0, ANGLEPlatformCurrent()); |
| |
| auto &decompressor = AstcDecompressor::get(); |
| if (!decompressor.available()) |
| GTEST_SKIP() << "ASTC decompressor not available"; |
| |
| std::vector<Rgba> output(width * height); |
| std::vector<uint8_t> astcData = makeAstcCheckerboard(width, height); |
| int32_t status = |
| decompressor.decompress(singleThreadedPool, multiThreadedPool, width, height, 8, 8, |
| astcData.data(), astcData.size(), (uint8_t *)output.data()); |
| EXPECT_EQ(status, 0); |
| |
| std::vector<Rgba> expected = makeCheckerboard(width, height); |
| |
| ASSERT_THAT(output, ElementsAreArray(expected)); |
| } |
| |
| // Test that getStatusString returns non-null even for unknown statuses |
| TEST(AstcDecompressor, getStatusStringAlwaysNonNull) |
| { |
| EXPECT_THAT(AstcDecompressor::get().getStatusString(-10000), NotNull()); |
| } |
| |
| } // namespace |