Changeset - r27103:bc9d171a796b
[Not reviewed]
master
1 6 3
Rubidium - 14 months ago 2023-04-10 17:02:31
rubidium@openttd.org
Add: unit test functionality using catch2
10 files changed with 769 insertions and 571 deletions:
0 comments (0 inline, 0 general)
.github/workflows/ci-build.yml
Show inline comments
 
@@ -65,7 +65,7 @@ jobs:
 

	
 
        echo "::group::Build"
 
        echo "Running on $(nproc) cores"
 
        cmake --build . -j $(nproc)
 
        cmake --build . -j $(nproc) -t openttd
 
        echo "::endgroup::"
 

	
 
  linux:
.github/workflows/codeql.yml
Show inline comments
 
@@ -74,6 +74,7 @@ jobs:
 
          +**/*.*
 
          -**/table/*.*
 
          -**/generated/**/*.*
 
          -**/tests/*.*
 
        input: sarif-results/cpp.sarif
 
        output: sarif-results/cpp.sarif
 

	
CMakeLists.txt
Show inline comments
 
@@ -215,6 +215,7 @@ if(OPTION_PACKAGE_DEPENDENCIES)
 
    set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
 
endif()
 

	
 
include(CTest)
 
include(SourceList)
 

	
 
# Needed by rev.cpp
 
@@ -226,6 +227,7 @@ include(MSVCFilters)
 

	
 
add_library(openttd_lib OBJECT ${GENERATED_SOURCE_FILES})
 
add_executable(openttd WIN32)
 
add_executable(openttd_test)
 
set_target_properties(openttd PROPERTIES OUTPUT_NAME "${BINARY_NAME}")
 
# All other files are added via target_sources()
 

	
 
@@ -254,6 +256,10 @@ target_link_libraries(openttd
 
    openttd::basesets
 
)
 

	
 
target_link_libraries(openttd_test PRIVATE openttd_lib)
 
include(Catch)
 
catch_discover_tests(openttd_test)
 

	
 
if(HAIKU)
 
    target_link_libraries(openttd_lib "be" "network" "midi")
 
endif()
cmake/SourceList.cmake
Show inline comments
 
@@ -21,6 +21,29 @@ function(add_files)
 
    endforeach()
 
endfunction()
 

	
 
# Add a test file to be compiled.
 
#
 
# add_test_files([file1 ...] CONDITION condition [condition ...])
 
#
 
# CONDITION is a complete statement that can be evaluated with if().
 
# If it evaluates true, the source files will be added; otherwise not.
 
# For example: ADD_IF SDL_FOUND AND Allegro_FOUND
 
#
 
function(add_test_files)
 
    cmake_parse_arguments(PARAM "" "" "CONDITION" ${ARGN})
 
    set(PARAM_FILES "${PARAM_UNPARSED_ARGUMENTS}")
 

	
 
    if(PARAM_CONDITION)
 
        if(NOT (${PARAM_CONDITION}))
 
            return()
 
        endif()
 
    endif()
 

	
 
    foreach(FILE IN LISTS PARAM_FILES)
 
        target_sources(openttd_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${FILE})
 
    endforeach()
 
endfunction()
 

	
 
# This function works around an 'issue' with CMake, where
 
# set_source_files_properties() only works in the scope of the file. We want
 
# to set properties for the source file on a more global level. To solve this,
src/landscape.cpp
Show inline comments
 
@@ -221,7 +221,7 @@ uint ApplyFoundationToSlope(Foundation f
 
 * @param corners slope to examine
 
 * @return height of given point of given slope
 
 */
 
static constexpr uint InternalGetPartialPixelZ(int x, int y, Slope corners)
 
uint GetPartialPixelZ(int x, int y, Slope corners)
 
{
 
	if (IsHalftileSlope(corners)) {
 
		/* A foundation is placed on half the tile at a specific corner. This means that,
 
@@ -285,21 +285,6 @@ static constexpr uint InternalGetPartial
 
	}
 
}
 

	
 
#include "tests/landscape_partial_pixel_z.h"
 

	
 
/**
 
 * Determines height at given coordinate of a slope.
 
 * See #InternalGetPartialPixelZ.
 
 * @param x x coordinate (value from 0 to 15)
 
 * @param y y coordinate (value from 0 to 15)
 
 * @param corners slope to examine
 
 * @return height of given point of given slope
 
 */
 
uint GetPartialPixelZ(int x, int y, Slope corners)
 
{
 
	return InternalGetPartialPixelZ(x, y, corners);
 
}
 

	
 
/**
 
 * Return world \c Z coordinate of a given point of a tile. Normally this is the
 
 * Z of the ground/foundation at the given location, but in some cases the
src/tests/CMakeLists.txt
Show inline comments
 
add_files(
 
    landscape_partial_pixel_z.h
 
add_test_files(
 
    landscape_partial_pixel_z.cpp
 
    math_func.cpp
 
    test_main.cpp
 
)
src/tests/landscape_partial_pixel_z.cpp
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file landscape_partial_pixel_z.cpp Tests for consistency/validity of the results of GetPartialPixelZ. */
 

	
 
#include "../stdafx.h"
 

	
 
#include "../3rdparty/catch2/catch.hpp"
 

	
 
#include "../landscape.h"
 
#include "../slope_func.h"
 
#include <array>
 

	
 
/**
 
 * Check whether the addition of two slope's GetPartialPixelZ values results in
 
 * the GetPartialPixelZ values of the expected slope.
 
 * This iterates over all sub-pixel locations within a single tile.
 
 * @param slope_expected The slope that is expected.
 
 * @param slope_a The first slope of the addition.
 
 * @param slope_b The second slope of the addition.
 
 * @return True iff at all GetPartialPixelZ results are the same for each sub-tile position.
 
 */
 
bool CheckPartialPixelZSlopeAddition(Slope slope_expected, Slope slope_a, Slope slope_b)
 
{
 
	for (uint x = 0; x < TILE_SIZE; x++) {
 
		for (uint y = 0; y < TILE_SIZE; y++) {
 
			int z_a = GetPartialPixelZ(x, y, slope_a);
 
			int z_b = GetPartialPixelZ(x, y, slope_b);
 
			int z_result = GetPartialPixelZ(x, y, slope_expected);
 
			if (z_result != z_a + z_b) return false;
 
		}
 
	}
 
	return true;
 
}
 

	
 
TEST_CASE("PartialPixelSlopeAdditionTest - A one corner slope, plus the opposite three corner slope results in a flat but elevated slope")
 
{
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_ELEVATED, SLOPE_N, SLOPE_WSE));
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_ELEVATED, SLOPE_E, SLOPE_NWS));
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_ELEVATED, SLOPE_S, SLOPE_ENW));
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_ELEVATED, SLOPE_W, SLOPE_SEN));
 
}
 

	
 
TEST_CASE("PartialPixelSlopeAdditionTest - Diagonal slopes with their opposite slope result in a flat but elevated slope")
 
{
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_ELEVATED, SLOPE_NW, SLOPE_SE));
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_ELEVATED, SLOPE_SW, SLOPE_NE));
 
}
 

	
 
TEST_CASE("PartialPixelSlopeAdditionTest - Half tile slopes with their opposite half tile slope result in a flat but elevated slope")
 
{
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_ELEVATED, HalftileSlope(SLOPE_N, CORNER_N), HalftileSlope(SLOPE_S, CORNER_S)));
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_ELEVATED, HalftileSlope(SLOPE_E, CORNER_E), HalftileSlope(SLOPE_W, CORNER_W)));
 
}
 

	
 
TEST_CASE("PartialPixelSlopeAdditionTest - Two opposite one corner slopes result in the two corner slope with opposite corners")
 
{
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_NS, SLOPE_N, SLOPE_S));
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_EW, SLOPE_E, SLOPE_W));
 
}
 

	
 
TEST_CASE("PartialPixelSlopeAdditionTest - A steep slope is a one corner slope on top of a three corner slope")
 
{
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_STEEP_N, SLOPE_N, SLOPE_ENW));
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_STEEP_E, SLOPE_E, SLOPE_SEN));
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_STEEP_S, SLOPE_S, SLOPE_WSE));
 
	CHECK(CheckPartialPixelZSlopeAddition(SLOPE_STEEP_W, SLOPE_W, SLOPE_NWS));
 
}
 

	
 
TEST_CASE("PartialPixelSlopeAdditionTest - A half tile steep slope is a one corner half tile on top of a three corner slope")
 
{
 
	CHECK(CheckPartialPixelZSlopeAddition(HalftileSlope(SLOPE_STEEP_N, CORNER_N), HalftileSlope(SLOPE_N, CORNER_N), SLOPE_ENW));
 
	CHECK(CheckPartialPixelZSlopeAddition(HalftileSlope(SLOPE_STEEP_E, CORNER_E), HalftileSlope(SLOPE_E, CORNER_E), SLOPE_SEN));
 
	CHECK(CheckPartialPixelZSlopeAddition(HalftileSlope(SLOPE_STEEP_S, CORNER_S), HalftileSlope(SLOPE_S, CORNER_S), SLOPE_WSE));
 
	CHECK(CheckPartialPixelZSlopeAddition(HalftileSlope(SLOPE_STEEP_W, CORNER_W), HalftileSlope(SLOPE_W, CORNER_W), SLOPE_NWS));
 
}
 

	
 
/**
 
 * Check whether the partial pixel Z values are the expected values. The arrays
 
 * are as if the map is rotated 45 degrees counterclockwise.
 
 * @param slope The slope that is to be checked.
 
 * @param expected The expect partial pixels Z values.
 
 * @return True iff at all GetPartialPixelZ results are the same as the expected Z-coordinates.
 
 */
 
bool CheckPartialPixelZ(Slope slope, std::array<int, TILE_SIZE * TILE_SIZE> expected)
 
{
 
	for (uint i = 0; i < expected.size(); i++) {
 
		int actual = GetPartialPixelZ(GB(i, 4, 4), GB(i, 0, 4), slope);
 
		if (actual != expected[i]) return false;
 
	}
 
	return true;
 
}
 

	
 
TEST_CASE("PartialPixelTest - One corner up slopes - SLOPE_N")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_N, {
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0,
 
		7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0,
 
		6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0,
 
		6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0,
 
		5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0,
 
		5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
		4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
 
		4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - One corner up slopes - SLOPE_E")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_E, {
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7,
 
		0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7,
 
		0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
 
		0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6,
 
		0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5,
 
		0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5,
 
		0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - One corner up slopes - SLOPE_S")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_S, {
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4,
 
		0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
 
		0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5,
 
		0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5,
 
		0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6,
 
		0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
 
		0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7,
 
		0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - One corner up slopes - SLOPE_W")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_W, {
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
 
		5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
		5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0,
 
		6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0,
 
		6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0,
 
		7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0,
 
		7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Two corner up, diagonal slopes - SLOPE_NE")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_NE, {
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
 
		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
 
		6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
 
		6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
 
		5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
 
		5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
 
		4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
 
		4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
 
		3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
 
		3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
 
		2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
		2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Two corner up, diagonal slopes - SLOPE_SE")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_SE, {
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Two corner up, diagonal slopes - SLOPE_SW")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_SW, {
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 
		2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
		2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
		3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
 
		3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
 
		4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
 
		4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
 
		5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
 
		5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
 
		6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
 
		6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
 
		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
 
		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Two corner up, diagonal slopes - SLOPE_NW")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_NW, {
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Two opposite corner up slopes - SLOPE_NS")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_NS, {
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0,
 
		7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1,
 
		6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1,
 
		6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2,
 
		5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2,
 
		5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3,
 
		4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3,
 
		4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4,
 
		3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
 
		3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5,
 
		2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5,
 
		2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6,
 
		1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
 
		1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7,
 
		0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Two opposite corner up slopes - SLOPE_EW")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_EW, {
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7,
 
		1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7,
 
		1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
 
		2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6,
 
		2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5,
 
		3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5,
 
		3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
 
		4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4,
 
		4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3,
 
		5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2, 3,
 
		5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2, 2,
 
		6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1, 2,
 
		6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1, 1,
 
		7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 1,
 
		7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Three corner up slopes - SLOPE_ENW")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_ENW, {
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4,
 
		8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4,
 
		8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3,
 
		8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3,
 
		8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2,
 
		8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2,
 
		8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1,
 
		8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Three corner up slopes - SLOPE_SEN")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_SEN, {
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
 
		3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8,
 
		3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,
 
		2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8,
 
		2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,
 
		1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8,
 
		1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Three corner up slopes - SLOPE_WSE")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_WSE, {
 
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
 
		1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
 
		1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8,
 
		2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,
 
		2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8,
 
		3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,
 
		3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8,
 
		4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
 
		4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Three corner up slopes - SLOPE_NWS")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_NWS, {
 
		8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,
 
		8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1,
 
		8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1,
 
		8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2,
 
		8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2,
 
		8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3,
 
		8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3,
 
		8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Normal half tile slopes - SLOPE/CORNER_N")
 
{
 
	CHECK(CheckPartialPixelZ(HalftileSlope(SLOPE_N, CORNER_N), {
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Normal half tile slopes - SLOPE/CORNER_E")
 
{
 
	CHECK(CheckPartialPixelZ(HalftileSlope(SLOPE_E, CORNER_E), {
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Normal half tile slopes - SLOPE/CORNER_S")
 
{
 
	CHECK(CheckPartialPixelZ(HalftileSlope(SLOPE_S, CORNER_S), {
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
 
		0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Normal half tile slopes - SLOPE/CORNER_W")
 
{
 
	CHECK(CheckPartialPixelZ(HalftileSlope(SLOPE_W, CORNER_W), {
 
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0,
 
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Steep slopes - SLOPE_STEEP_N")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_STEEP_N, {
 
		16, 15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,
 
		15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,
 
		15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,
 
		14, 14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,
 
		14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,
 
		13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,
 
		13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,
 
		12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,
 
		12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,
 
		11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,
 
		11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,
 
		10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,
 
		10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,
 
		 9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,
 
		 9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,
 
		 8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,  1}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Steep slopes - SLOPE_STEEP_E")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_STEEP_E, {
 
		 8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16,
 
		 8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15,
 
		 7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15,
 
		 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
 
		 6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14,
 
		 6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13,
 
		 5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13,
 
		 5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12,
 
		 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12,
 
		 4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11,
 
		 3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11,
 
		 3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10,
 
		 2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10,
 
		 2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,
 
		 1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,
 
		 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Steep slopes - SLOPE_STEEP_S")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_STEEP_S, {
 
		 0,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,
 
		 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,
 
		 1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,
 
		 2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9,
 
		 2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10,
 
		 3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10,
 
		 3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11,
 
		 4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11,
 
		 4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12,
 
		 5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12,
 
		 5,  6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13,
 
		 6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13,
 
		 6,  7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14,
 
		 7,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
 
		 7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15,
 
		 8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Steep slopes - SLOPE_STEEP_W")
 
{
 
	CHECK(CheckPartialPixelZ(SLOPE_STEEP_W, {
 
		 8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,  1,  0,
 
		 8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,  1,
 
		 9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,
 
		 9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,
 
		10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,
 
		10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,
 
		11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,
 
		11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,
 
		12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,
 
		12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,
 
		13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,
 
		13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,  6,
 
		14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,  6,
 
		14, 14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,  7,
 
		15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,  7,
 
		15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Half tile on top of steep slopes - SLOPE_STEEP/CORNER_N")
 
{
 
	CHECK(CheckPartialPixelZ(HalftileSlope(SLOPE_STEEP_N, CORNER_N), {
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,
 
		16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,
 
		16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,
 
		16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,
 
		16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,
 
		16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,
 
		16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,
 
		16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,
 
		16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,  1}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Half tile on top of steep slopes - SLOPE_STEEP/CORNER_E")
 
{
 
	CHECK(CheckPartialPixelZ(HalftileSlope(SLOPE_STEEP_E, CORNER_E), {
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16,
 
		 3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16,
 
		 3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16,
 
		 2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16,
 
		 2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16,
 
		 1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16,
 
		 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Half tile on top of steep slopes - SLOPE_STEEP/CORNER_S")
 
{
 
	CHECK(CheckPartialPixelZ(HalftileSlope(SLOPE_STEEP_S, CORNER_S), {
 
		 0,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,
 
		 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16,
 
		 1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16,
 
		 2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16,
 
		 2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16,
 
		 3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16,
 
		 3,  4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16,
 
		 4,  4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16,
 
		 4,  5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 5,  5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 5,  6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 6,  6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 6,  7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 7,  7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 7,  8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 
		 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}));
 
}
 

	
 
TEST_CASE("PartialPixelTest - Half tile on top of steep slopes - SLOPE_STEEP/CORNER_W")
 
{
 
	CHECK(CheckPartialPixelZ(HalftileSlope(SLOPE_STEEP_W, CORNER_W), {
 
		 8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,  1,  0,
 
		16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,  1,
 
		16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,
 
		16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,
 
		16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,
 
		16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,
 
		16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,  3,
 
		16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,  4,
 
		16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,  4,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,  5,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,  5,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,  6,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,  6,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,  7,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8,  7,
 
		16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  8}));
 
}
src/tests/landscape_partial_pixel_z.h
Show inline comments
 
deleted file
src/tests/math_func.cpp
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file math_func_test.cpp Test functionality from core/math_func. */
 

	
 
#include "../stdafx.h"
 

	
 
#include "../3rdparty/catch2/catch.hpp"
 

	
 
#include "../core/math_func.hpp"
 

	
 
TEST_CASE("LeastCommonMultipleTest - Zero")
 
{
 
	CHECK(0 == LeastCommonMultiple(0, 0));
 
	CHECK(0 == LeastCommonMultiple(0, 600));
 
	CHECK(0 == LeastCommonMultiple(600, 0));
 
}
 

	
 
TEST_CASE("LeastCommonMultipleTest - FindLCM")
 
{
 
	CHECK(25 == LeastCommonMultiple(5, 25));
 
	CHECK(25 == LeastCommonMultiple(25, 5));
 
	CHECK(130 == LeastCommonMultiple(5, 26));
 
	CHECK(130 == LeastCommonMultiple(26, 5));
 
}
 

	
 
TEST_CASE("GreatestCommonDivisorTest - Negative")
 
{
 
	CHECK(4 == GreatestCommonDivisor(4, -52));
 
	// CHECK(3 == GreatestCommonDivisor(-27, 6)); // error - returns -3
 
}
 

	
 
TEST_CASE("GreatestCommonDivisorTest - Zero")
 
{
 
	CHECK(27 == GreatestCommonDivisor(0, 27));
 
	CHECK(27 == GreatestCommonDivisor(27, 0));
 
}
 

	
 
TEST_CASE("GreatestCommonDivisorTest - FindGCD")
 
{
 
	CHECK(5 == GreatestCommonDivisor(5, 25));
 
	CHECK(5 == GreatestCommonDivisor(25, 5));
 
	CHECK(1 == GreatestCommonDivisor(7, 27));
 
	CHECK(1 == GreatestCommonDivisor(27, 7));
 
}
 

	
 
TEST_CASE("DivideApproxTest - Negative")
 
{
 
	CHECK(-2 == DivideApprox(-5, 2));
 
	CHECK(2 == DivideApprox(-5, -2));
 
	CHECK(-1 == DivideApprox(-66, 80));
 
}
 

	
 
TEST_CASE("DivideApproxTest, Divide")
 
{
 
	CHECK(2 == DivideApprox(5, 2));
 
	CHECK(3 == DivideApprox(80, 30));
 
	CHECK(3 == DivideApprox(8, 3));
 
	CHECK(0 == DivideApprox(3, 8));
 
}
 

	
 
TEST_CASE("IntSqrtTest - Zero")
 
{
 
	CHECK(0 == IntSqrt(0));
 
}
 

	
 
TEST_CASE("IntSqrtTest - FindSqRt")
 
{
 
	CHECK(5 == IntSqrt(25));
 
	CHECK(10 == IntSqrt(100));
 
	CHECK(9 == IntSqrt(88));
 
	CHECK(1696 == IntSqrt(2876278));
 
}
src/tests/test_main.cpp
Show inline comments
 
new file 100644
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file test_main.cpp Entry point for all the unit tests. */
 

	
 
#include "../stdafx.h"
 

	
 
#define CATCH_CONFIG_MAIN
 
#define DO_NOT_USE_WMAIN
 
#include "../3rdparty/catch2/catch.hpp"
0 comments (0 inline, 0 general)