diff --git a/ASTCEncoder/test/CMakeLists.txt b/ASTCEncoder/test/CMakeLists.txt index f2d80ef..4856238 100644 --- a/ASTCEncoder/test/CMakeLists.txt +++ b/ASTCEncoder/test/CMakeLists.txt @@ -78,3 +78,57 @@ FOREACH(TEST ${TESTS}) TARGET_LINK_LIBRARIES(${TEST_NAME} gtest_main) ADD_TEST(${TEST_NAME} ${TEST_NAME}) ENDFOREACH() + + +# Setup the test that makes sure that we don't have any +# regressions in the ASTC decoder. +SET(TEST_NAME Test_ASTCEncoder_Decompress) + +# Copy the .pvr files that we will use for testing... +SET(TEST_IMAGES 4x4 12x12 8x8 6x5 10x8 ) +FOREACH(IMAGE ${TEST_IMAGES}) + FILE(COPY + ${FasTC_SOURCE_DIR}/ASTCEncoder/test/data/mandrill_${IMAGE}.astc + DESTINATION ${CMAKE_BINARY_DIR} + USE_SOURCE_PERMISSIONS + ) +ENDFOREACH() + +FOREACH(IMAGE ${TEST_IMAGES}) + FILE(COPY + ${FasTC_SOURCE_DIR}/ASTCEncoder/test/data/mandrill_decompressed_${IMAGE}.png + DESTINATION ${CMAKE_BINARY_DIR} + USE_SOURCE_PERMISSIONS + ) +ENDFOREACH() + +INCLUDE_DIRECTORIES( ${FasTC_SOURCE_DIR}/IO/include ) +INCLUDE_DIRECTORIES( ${FasTC_BINARY_DIR}/IO/include ) +INCLUDE_DIRECTORIES( ${FasTC_SOURCE_DIR}/Core/include ) + +# HACK for MSVC 2012... +IF(MSVC) + ADD_DEFINITIONS(-D_VARIADIC_MAX=10) +ENDIF() + +# The cpp file to compile for the test +ADD_EXECUTABLE(${TEST_NAME} TestASTCDecompression.cpp) + +# Libraries that we need... +TARGET_LINK_LIBRARIES(${TEST_NAME} ASTCEncoder) +TARGET_LINK_LIBRARIES(${TEST_NAME} gtest_main) +TARGET_LINK_LIBRARIES(${TEST_NAME} FasTCBase) +TARGET_LINK_LIBRARIES(${TEST_NAME} FasTCIO) +TARGET_LINK_LIBRARIES(${TEST_NAME} FasTCCore) + +IF(MSVC) + ADD_TEST(${TEST_NAME} + ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/Debug/${TEST_NAME} + ) +ELSE() + ADD_TEST(${TEST_NAME} + ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} + ) +ENDIF() diff --git a/ASTCEncoder/test/TestASTCDecompression.cpp b/ASTCEncoder/test/TestASTCDecompression.cpp new file mode 100644 index 0000000..7d874f8 --- /dev/null +++ b/ASTCEncoder/test/TestASTCDecompression.cpp @@ -0,0 +1,114 @@ +/* FasTC + * Copyright (c) 2013 University of North Carolina at Chapel Hill. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for educational, research, and non-profit purposes, without + * fee, and without a written agreement is hereby granted, provided that the + * above copyright notice, this paragraph, and the following four paragraphs + * appear in all copies. + * + * Permission to incorporate this software into commercial products may be + * obtained by contacting the authors or the Office of Technology Development + * at the University of North Carolina at Chapel Hill . + * + * This software program and documentation are copyrighted by the University of + * North Carolina at Chapel Hill. The software program and documentation are + * supplied "as is," without any accompanying services from the University of + * North Carolina at Chapel Hill or the authors. The University of North + * Carolina at Chapel Hill and the authors do not warrant that the operation of + * the program will be uninterrupted or error-free. The end-user understands + * that the program was developed for research purposes and is advised not to + * rely exclusively on the program for any reason. + * + * IN NO EVENT SHALL THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL OR THE + * AUTHORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF + * THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF NORTH CAROLINA + * AT CHAPEL HILL OR THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND THE AUTHORS SPECIFICALLY + * DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY + * STATUTORY WARRANTY OF NON-INFRINGEMENT. THE SOFTWARE PROVIDED HEREUNDER IS ON + * AN "AS IS" BASIS, AND THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND + * THE AUTHORS HAVE NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS. + * + * Please send all BUG REPORTS to . + * + * The authors may be contacted via: + * + * Pavel Krajcevski + * Dept of Computer Science + * 201 S Columbia St + * Frederick P. Brooks, Jr. Computer Science Bldg + * Chapel Hill, NC 27599-3175 + * USA + * + * + */ + +#include "gtest/gtest.h" + +// This is our library header +#include "ASTCCompressor.h" + +#include "ImageFile.h" +#include "Image.h" + +class ImageTester { + private: + static void GenerateTestFilenames(const char *suffix, char *outASTC, char *outPNG) { + const char *basename = "mandrill"; + sprintf(outASTC, "%s_%s.astc", basename, suffix); + sprintf(outPNG, "%s_decompressed_%s.png", basename, suffix); + } + + public: + explicit ImageTester(const char *suffix) { + char astcFilename[256]; + char pngFilename[256]; + + GenerateTestFilenames(suffix, astcFilename, pngFilename); + + ImageFile astc (astcFilename); + bool success = astc.Load(); + EXPECT_TRUE(success); + if (!success) { + return; + } + + ImageFile png (pngFilename); + success = png.Load(); + EXPECT_TRUE(success); + if (!success) { + return; + } + + double PSNR = astc.GetImage()->ComputePSNR(png.GetImage()); + EXPECT_GT(PSNR, 60.0); + } +}; + +// 4x4 12x12 8x8 6x5 10x8 +TEST(Decompressor, Decompress4x4) { + ImageTester("4x4"); +} + +TEST(Decompressor, Decompress12x12) { + ImageTester("12x12"); +} + +TEST(Decompressor, Decompress8x8) { + ImageTester("8x8"); +} + +TEST(Decompressor, Decompress6x5) { + ImageTester("6x5"); +} + +TEST(Decompressor, Decompress10x8) { + ImageTester("10x8"); +} diff --git a/ASTCEncoder/test/data/mandrill_10x8.astc b/ASTCEncoder/test/data/mandrill_10x8.astc new file mode 100644 index 0000000..98597f2 Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_10x8.astc differ diff --git a/ASTCEncoder/test/data/mandrill_12x12.astc b/ASTCEncoder/test/data/mandrill_12x12.astc new file mode 100644 index 0000000..6b6346c Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_12x12.astc differ diff --git a/ASTCEncoder/test/data/mandrill_4x4.astc b/ASTCEncoder/test/data/mandrill_4x4.astc new file mode 100644 index 0000000..0b22300 Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_4x4.astc differ diff --git a/ASTCEncoder/test/data/mandrill_6x5.astc b/ASTCEncoder/test/data/mandrill_6x5.astc new file mode 100644 index 0000000..a9f81e2 Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_6x5.astc differ diff --git a/ASTCEncoder/test/data/mandrill_8x8.astc b/ASTCEncoder/test/data/mandrill_8x8.astc new file mode 100644 index 0000000..4c4019e Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_8x8.astc differ diff --git a/ASTCEncoder/test/data/mandrill_decompressed_10x8.png b/ASTCEncoder/test/data/mandrill_decompressed_10x8.png new file mode 100644 index 0000000..a83fc8d Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_decompressed_10x8.png differ diff --git a/ASTCEncoder/test/data/mandrill_decompressed_12x12.png b/ASTCEncoder/test/data/mandrill_decompressed_12x12.png new file mode 100644 index 0000000..4563ff2 Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_decompressed_12x12.png differ diff --git a/ASTCEncoder/test/data/mandrill_decompressed_4x4.png b/ASTCEncoder/test/data/mandrill_decompressed_4x4.png new file mode 100644 index 0000000..b80b885 Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_decompressed_4x4.png differ diff --git a/ASTCEncoder/test/data/mandrill_decompressed_6x5.png b/ASTCEncoder/test/data/mandrill_decompressed_6x5.png new file mode 100644 index 0000000..9ca31e4 Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_decompressed_6x5.png differ diff --git a/ASTCEncoder/test/data/mandrill_decompressed_8x8.png b/ASTCEncoder/test/data/mandrill_decompressed_8x8.png new file mode 100644 index 0000000..cbe5755 Binary files /dev/null and b/ASTCEncoder/test/data/mandrill_decompressed_8x8.png differ