mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge branch 'test/ride-ratings' into develop
This commit is contained in:
commit
528dbe115d
14
.travis.yml
14
.travis.yml
|
@ -16,7 +16,7 @@ matrix:
|
|||
services:
|
||||
- docker
|
||||
env:
|
||||
- OPENRCT2_CMAKE_OPTS="-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DPORTABLE=ON" TARGET=ubuntu_amd64
|
||||
- OPENRCT2_CMAKE_OPTS="-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DPORTABLE=ON -DDISABLE_RCT2_TESTS=on" TARGET=ubuntu_amd64
|
||||
- secure: "S3u2VCE2Vy8KNXoeh+DhnzjCmgTX0r95uEZrXDU+IKANOOCKn7Dg4OFDZE3LY/i1y2/EUDpnR5yLC38Ks795EUP/sv/OoMl4tjQ20yERjqWh+gcIRrgx7SdVabuAh3t4aBdaLD4Pfnj5avxeCt6rL7yGnj0wdbrbJSBZPsgSnuQ="
|
||||
after_success:
|
||||
- sudo chown -R $USER build
|
||||
|
@ -37,7 +37,7 @@ matrix:
|
|||
services:
|
||||
- docker
|
||||
env:
|
||||
- OPENRCT2_CMAKE_OPTS="-DFORCE32=ON -DDISABLE_RCT2=OFF -DCMAKE_INSTALL_PREFIX=OpenRCT2" TARGET=ubuntu_i686
|
||||
- OPENRCT2_CMAKE_OPTS="-DFORCE32=ON -DDISABLE_RCT2=OFF -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DDISABLE_RCT2_TESTS=on" TARGET=ubuntu_i686
|
||||
- secure: "S3u2VCE2Vy8KNXoeh+DhnzjCmgTX0r95uEZrXDU+IKANOOCKn7Dg4OFDZE3LY/i1y2/EUDpnR5yLC38Ks795EUP/sv/OoMl4tjQ20yERjqWh+gcIRrgx7SdVabuAh3t4aBdaLD4Pfnj5avxeCt6rL7yGnj0wdbrbJSBZPsgSnuQ="
|
||||
after_success:
|
||||
- sudo chown -R $USER build
|
||||
|
@ -55,19 +55,19 @@ matrix:
|
|||
else curl --progress-bar --upload-file openrct2-linux.tar.gz https://transfer.sh/openrct2-linux-i686.tar.gz -o link && cat link;
|
||||
fi
|
||||
- os: linux
|
||||
env: OPENRCT2_CMAKE_OPTS="-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++" TARGET=ubuntu_amd64
|
||||
env: OPENRCT2_CMAKE_OPTS="-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DDISABLE_RCT2_TESTS=on" TARGET=ubuntu_amd64
|
||||
- os: linux
|
||||
env: OPENRCT2_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DFORCE32=on" TARGET=windows
|
||||
env: OPENRCT2_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DFORCE32=on -DDISABLE_RCT2_TESTS=on" TARGET=windows
|
||||
- os: linux
|
||||
env: TARGET=docker64 OPENRCT2_CMAKE_OPTS="-DDISABLE_TTF=ON -DCMAKE_BUILD_TYPE=release"
|
||||
env: TARGET=docker64 OPENRCT2_CMAKE_OPTS="-DDISABLE_TTF=ON -DCMAKE_BUILD_TYPE=release -DDISABLE_RCT2_TESTS=on"
|
||||
services:
|
||||
- docker
|
||||
- os: linux
|
||||
env: OPENRCT2_CMAKE_OPTS="-DDISABLE_NETWORK=ON -DDISABLE_HTTP_TWITCH=ON" TARGET=docker64
|
||||
env: OPENRCT2_CMAKE_OPTS="-DDISABLE_NETWORK=ON -DDISABLE_HTTP_TWITCH=ON -DDISABLE_RCT2_TESTS=on" TARGET=docker64
|
||||
services:
|
||||
- docker
|
||||
- os: linux
|
||||
env: OPENRCT2_CMAKE_OPTS="-DDISABLE_OPENGL=ON" TARGET=docker64
|
||||
env: OPENRCT2_CMAKE_OPTS="-DDISABLE_OPENGL=ON -DDISABLE_RCT2_TESTS=on" TARGET=docker64
|
||||
services:
|
||||
- docker
|
||||
- os: osx
|
||||
|
|
|
@ -21,7 +21,9 @@ configuration: Release
|
|||
build:
|
||||
project: openrct2.proj
|
||||
test_script:
|
||||
- ps: msbuild openrct2.proj /t:test /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
|
||||
- ps: msbuild openrct2.proj /t:TestNoRCT2 /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
|
||||
after_test:
|
||||
- ps: (new-object net.webclient).UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\artifacts\test-results.xml))
|
||||
artifacts:
|
||||
- path: .\artifacts\openrct2-portable*.zip
|
||||
name: OpenRCT2-portable
|
||||
|
|
|
@ -189,7 +189,10 @@
|
|||
</Target>
|
||||
|
||||
<Target Name="Test" DependsOnTargets="Build">
|
||||
<Exec Command="$(TargetDir)tests\tests.exe" />
|
||||
<Exec Command="$(TargetDir)tests\tests.exe "--gtest_output=xml:$(ArtifactsDir)test-results.xml"" />
|
||||
</Target>
|
||||
<Target Name="TestNoRCT2" DependsOnTargets="Build">
|
||||
<Exec Command="$(TargetDir)tests\tests.exe "--gtest_filter=-RideRatings*" "--gtest_output=xml:$(ArtifactsDir)test-results.xml"" />
|
||||
</Target>
|
||||
<Target Name="TestPaint" DependsOnTargets="Build" Condition="'$(Platform)'=='Win32'">
|
||||
<Exec Command="$(TargetDir)testpaint\openrct2.exe" />
|
||||
|
|
|
@ -294,6 +294,6 @@ typedef struct registers {
|
|||
assert_struct_size(registers, 7 * 4);
|
||||
#pragma pack(pop)
|
||||
|
||||
#define UNUSED(x) ((void)(x))
|
||||
#define UNUSED(x) ((void)(x))
|
||||
|
||||
#endif
|
||||
|
|
|
@ -71,6 +71,38 @@ namespace File
|
|||
auto fs = FileStream(path, FILE_MODE_WRITE);
|
||||
fs.Write(buffer, length);
|
||||
}
|
||||
|
||||
std::vector<std::string> ReadAllLines(const std::string &path)
|
||||
{
|
||||
std::vector<std::string> lines;
|
||||
size_t length;
|
||||
char * data = (char *)ReadAllBytes(path, &length);
|
||||
char * lineStart = data;
|
||||
char * ch = data;
|
||||
char lastC = 0;
|
||||
for (size_t i = 0; i < length; i++)
|
||||
{
|
||||
char c = *ch;
|
||||
if (c == '\n' && lastC == '\r')
|
||||
{
|
||||
// Ignore \r\n
|
||||
lineStart = ch + 1;
|
||||
}
|
||||
else if (c == '\n' || c == '\r')
|
||||
{
|
||||
lines.emplace_back(lineStart, ch - lineStart);
|
||||
lineStart = ch + 1;
|
||||
}
|
||||
lastC = c;
|
||||
ch++;
|
||||
}
|
||||
|
||||
// Last line
|
||||
lines.emplace_back(lineStart, ch - lineStart);
|
||||
|
||||
Memory::Free(data);
|
||||
return lines;
|
||||
}
|
||||
}
|
||||
|
||||
extern "C"
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "../common.h"
|
||||
|
||||
namespace File
|
||||
|
@ -27,4 +28,5 @@ namespace File
|
|||
bool Move(const std::string &srcPath, const std::string &dstPath);
|
||||
void * ReadAllBytes(const std::string &path, size_t * length);
|
||||
void WriteAllBytes(const std::string &path, const void * buffer, size_t length);
|
||||
std::vector<std::string> ReadAllLines(const std::string &path);
|
||||
}
|
||||
|
|
|
@ -23,6 +23,13 @@ namespace Path
|
|||
{
|
||||
utf8 * Append(utf8 * buffer, size_t bufferSize, const utf8 * src);
|
||||
std::string Combine(const std::string &a, const std::string &b);
|
||||
|
||||
template<typename... Args>
|
||||
std::string Combine(const std::string &a, const std::string &b, Args... args)
|
||||
{
|
||||
return Combine(a, Combine(b, args...));
|
||||
}
|
||||
|
||||
std::string GetDirectory(const std::string &path);
|
||||
utf8 * GetDirectory(const utf8 * path);
|
||||
utf8 * GetDirectory(utf8 * buffer, size_t bufferSize, const utf8 * path);
|
||||
|
|
|
@ -8221,15 +8221,15 @@ uint32 ride_customers_per_hour(const rct_ride *ride) {
|
|||
// Calculates the number of customers for this ride in the last 5 minutes (or more correctly 9600 game ticks)
|
||||
uint32 ride_customers_in_last_5_minutes(const rct_ride *ride) {
|
||||
uint32 sum = ride->num_customers[0]
|
||||
+ ride->num_customers[1]
|
||||
+ ride->num_customers[2]
|
||||
+ ride->num_customers[3]
|
||||
+ ride->num_customers[4]
|
||||
+ ride->num_customers[5]
|
||||
+ ride->num_customers[6]
|
||||
+ ride->num_customers[7]
|
||||
+ ride->num_customers[8]
|
||||
+ ride->num_customers[9];
|
||||
+ ride->num_customers[1]
|
||||
+ ride->num_customers[2]
|
||||
+ ride->num_customers[3]
|
||||
+ ride->num_customers[4]
|
||||
+ ride->num_customers[5]
|
||||
+ ride->num_customers[6]
|
||||
+ ride->num_customers[7]
|
||||
+ ride->num_customers[8]
|
||||
+ ride->num_customers[9];
|
||||
return sum;
|
||||
}
|
||||
|
||||
|
@ -8376,3 +8376,103 @@ bool ride_has_ratings(const rct_ride * ride)
|
|||
{
|
||||
return ride->excitement != RIDE_RATING_UNDEFINED;
|
||||
}
|
||||
|
||||
const char * ride_type_get_enum_name(sint32 rideType)
|
||||
{
|
||||
static const char * RideTypeEnumNames[RIDE_TYPE_COUNT] =
|
||||
{
|
||||
nameof(RIDE_TYPE_SPIRAL_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_STAND_UP_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_SUSPENDED_SWINGING_COASTER),
|
||||
nameof(RIDE_TYPE_INVERTED_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_JUNIOR_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_MINIATURE_RAILWAY),
|
||||
nameof(RIDE_TYPE_MONORAIL),
|
||||
nameof(RIDE_TYPE_MINI_SUSPENDED_COASTER),
|
||||
nameof(RIDE_TYPE_BOAT_RIDE),
|
||||
nameof(RIDE_TYPE_WOODEN_WILD_MOUSE),
|
||||
nameof(RIDE_TYPE_STEEPLECHASE),
|
||||
nameof(RIDE_TYPE_CAR_RIDE),
|
||||
nameof(RIDE_TYPE_LAUNCHED_FREEFALL),
|
||||
nameof(RIDE_TYPE_BOBSLEIGH_COASTER),
|
||||
nameof(RIDE_TYPE_OBSERVATION_TOWER),
|
||||
nameof(RIDE_TYPE_LOOPING_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_DINGHY_SLIDE),
|
||||
nameof(RIDE_TYPE_MINE_TRAIN_COASTER),
|
||||
nameof(RIDE_TYPE_CHAIRLIFT),
|
||||
nameof(RIDE_TYPE_CORKSCREW_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_MAZE),
|
||||
nameof(RIDE_TYPE_SPIRAL_SLIDE),
|
||||
nameof(RIDE_TYPE_GO_KARTS),
|
||||
nameof(RIDE_TYPE_LOG_FLUME),
|
||||
nameof(RIDE_TYPE_RIVER_RAPIDS),
|
||||
nameof(RIDE_TYPE_DODGEMS),
|
||||
nameof(RIDE_TYPE_PIRATE_SHIP),
|
||||
nameof(RIDE_TYPE_SWINGING_INVERTER_SHIP),
|
||||
nameof(RIDE_TYPE_FOOD_STALL),
|
||||
nameof(RIDE_TYPE_1D),
|
||||
nameof(RIDE_TYPE_DRINK_STALL),
|
||||
nameof(RIDE_TYPE_1F),
|
||||
nameof(RIDE_TYPE_SHOP),
|
||||
nameof(RIDE_TYPE_MERRY_GO_ROUND),
|
||||
nameof(RIDE_TYPE_22),
|
||||
nameof(RIDE_TYPE_INFORMATION_KIOSK),
|
||||
nameof(RIDE_TYPE_TOILETS),
|
||||
nameof(RIDE_TYPE_FERRIS_WHEEL),
|
||||
nameof(RIDE_TYPE_MOTION_SIMULATOR),
|
||||
nameof(RIDE_TYPE_3D_CINEMA),
|
||||
nameof(RIDE_TYPE_TOP_SPIN),
|
||||
nameof(RIDE_TYPE_SPACE_RINGS),
|
||||
nameof(RIDE_TYPE_REVERSE_FREEFALL_COASTER),
|
||||
nameof(RIDE_TYPE_LIFT),
|
||||
nameof(RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_CASH_MACHINE),
|
||||
nameof(RIDE_TYPE_TWIST),
|
||||
nameof(RIDE_TYPE_HAUNTED_HOUSE),
|
||||
nameof(RIDE_TYPE_FIRST_AID),
|
||||
nameof(RIDE_TYPE_CIRCUS_SHOW),
|
||||
nameof(RIDE_TYPE_GHOST_TRAIN),
|
||||
nameof(RIDE_TYPE_TWISTER_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_WOODEN_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_WILD_MOUSE),
|
||||
nameof(RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT),
|
||||
nameof(RIDE_TYPE_FLYING_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_FLYING_ROLLER_COASTER_ALT),
|
||||
nameof(RIDE_TYPE_VIRGINIA_REEL),
|
||||
nameof(RIDE_TYPE_SPLASH_BOATS),
|
||||
nameof(RIDE_TYPE_MINI_HELICOPTERS),
|
||||
nameof(RIDE_TYPE_LAY_DOWN_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_SUSPENDED_MONORAIL),
|
||||
nameof(RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT),
|
||||
nameof(RIDE_TYPE_REVERSER_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_HEARTLINE_TWISTER_COASTER),
|
||||
nameof(RIDE_TYPE_MINI_GOLF),
|
||||
nameof(RIDE_TYPE_GIGA_COASTER),
|
||||
nameof(RIDE_TYPE_ROTO_DROP),
|
||||
nameof(RIDE_TYPE_FLYING_SAUCERS),
|
||||
nameof(RIDE_TYPE_CROOKED_HOUSE),
|
||||
nameof(RIDE_TYPE_MONORAIL_CYCLES),
|
||||
nameof(RIDE_TYPE_COMPACT_INVERTED_COASTER),
|
||||
nameof(RIDE_TYPE_WATER_COASTER),
|
||||
nameof(RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER),
|
||||
nameof(RIDE_TYPE_INVERTED_HAIRPIN_COASTER),
|
||||
nameof(RIDE_TYPE_MAGIC_CARPET),
|
||||
nameof(RIDE_TYPE_SUBMARINE_RIDE),
|
||||
nameof(RIDE_TYPE_RIVER_RAFTS),
|
||||
nameof(RIDE_TYPE_50),
|
||||
nameof(RIDE_TYPE_ENTERPRISE),
|
||||
nameof(RIDE_TYPE_52),
|
||||
nameof(RIDE_TYPE_53),
|
||||
nameof(RIDE_TYPE_54),
|
||||
nameof(RIDE_TYPE_55),
|
||||
nameof(RIDE_TYPE_INVERTED_IMPULSE_COASTER),
|
||||
nameof(RIDE_TYPE_MINI_ROLLER_COASTER),
|
||||
nameof(RIDE_TYPE_MINE_RIDE),
|
||||
nameof(RIDE_TYPE_59),
|
||||
nameof(RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER),
|
||||
};
|
||||
|
||||
return RideTypeEnumNames[rideType];
|
||||
}
|
||||
|
|
|
@ -1164,4 +1164,6 @@ rct_map_element *get_station_platform(sint32 x, sint32 y, sint32 z, sint32 z_tol
|
|||
bool ride_has_adjacent_station(rct_ride *ride);
|
||||
bool ride_has_ratings(const rct_ride * ride);
|
||||
|
||||
const char * ride_type_get_enum_name(sint32 rideType);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -68,6 +68,7 @@ rct_ride_rating_calc_data gRideRatingsCalcData;
|
|||
|
||||
static const ride_ratings_calculation ride_ratings_calculate_func_table[RIDE_TYPE_COUNT];
|
||||
|
||||
static void ride_ratings_update_state();
|
||||
static void ride_ratings_update_state_0();
|
||||
static void ride_ratings_update_state_1();
|
||||
static void ride_ratings_update_state_2();
|
||||
|
@ -79,6 +80,25 @@ static void ride_ratings_calculate(rct_ride *ride);
|
|||
static void ride_ratings_calculate_value(rct_ride *ride);
|
||||
static void ride_ratings_score_close_proximity(rct_map_element *mapElement);
|
||||
|
||||
/**
|
||||
* This is a small hack function to keep calling the ride rating processor until
|
||||
* the given ride's ratings have been calculated. What ever is currently being
|
||||
* processed will be overwritten.
|
||||
* Only purpose of this function currently is for testing.
|
||||
*/
|
||||
void ride_ratings_update_ride(int rideIndex)
|
||||
{
|
||||
rct_ride *ride = get_ride(rideIndex);
|
||||
if (ride->type != RIDE_TYPE_NULL && ride->status != RIDE_STATUS_CLOSED) {
|
||||
gRideRatingsCalcData.current_ride = rideIndex;
|
||||
gRideRatingsCalcData.state = RIDE_RATINGS_STATE_INITIALISE;
|
||||
while (gRideRatingsCalcData.state != RIDE_RATINGS_STATE_FIND_NEXT_RIDE)
|
||||
{
|
||||
ride_ratings_update_state();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006B5A2A
|
||||
|
@ -88,6 +108,11 @@ void ride_ratings_update_all()
|
|||
if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR)
|
||||
return;
|
||||
|
||||
ride_ratings_update_state();
|
||||
}
|
||||
|
||||
static void ride_ratings_update_state()
|
||||
{
|
||||
switch (gRideRatingsCalcData.state) {
|
||||
case RIDE_RATINGS_STATE_FIND_NEXT_RIDE:
|
||||
ride_ratings_update_state_0();
|
||||
|
|
|
@ -44,6 +44,7 @@ typedef struct rct_ride_rating_calc_data {
|
|||
|
||||
extern rct_ride_rating_calc_data gRideRatingsCalcData;
|
||||
|
||||
void ride_ratings_update_ride(int rideIndex);
|
||||
void ride_ratings_update_all();
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
option(DISABLE_RCT2_TESTS "Disable tests that require RollerCoaster Tycoon 2 assets.")
|
||||
|
||||
# Bootstrap GoogleTest
|
||||
INCLUDE(ExternalProject)
|
||||
|
||||
|
@ -72,6 +74,16 @@ set(COMMON_TEST_SOURCES
|
|||
# Create a re-usable library to save some compilation time
|
||||
add_library(test-common STATIC ${COMMON_TEST_SOURCES})
|
||||
|
||||
# Setup testdata. It should be fine here, as the only way to reach here is by explicitly requesting tests.
|
||||
if (NOT "z$ENV{CI}" STREQUAL "z")
|
||||
message("Detected CI environment. Disabling ride rating test.")
|
||||
set(DISABLE_RCT2_TESTS ON)
|
||||
endif ()
|
||||
|
||||
if (NOT DISABLE_RCT2_TESTS)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_LIST_DIR}/testdata" "${CMAKE_CURRENT_BINARY_DIR}/testdata")
|
||||
endif ()
|
||||
|
||||
# Start of our tests
|
||||
|
||||
# sawyercoding test
|
||||
|
@ -115,3 +127,12 @@ set(STRING_TEST_SOURCES
|
|||
add_executable(test_string ${STRING_TEST_SOURCES})
|
||||
target_link_libraries(test_string ${GTEST_LIBRARIES} test-common dl z)
|
||||
add_test(NAME string COMMAND test_string)
|
||||
|
||||
# Ride ratings test
|
||||
if (NOT DISABLE_RCT2_TESTS)
|
||||
set(RIDE_RATINGS_TEST_SOURCES "${CMAKE_CURRENT_LIST_DIR}/RideRatings.cpp"
|
||||
"${CMAKE_CURRENT_LIST_DIR}/TestData.cpp")
|
||||
add_executable(test_ride_ratings ${RIDE_RATINGS_TEST_SOURCES})
|
||||
target_link_libraries(test_ride_ratings ${GTEST_LIBRARIES} libopenrct2 dl z)
|
||||
add_test(NAME ride_ratings COMMAND test_ride_ratings)
|
||||
endif ()
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
#include <string>
|
||||
#include <gtest/gtest.h>
|
||||
#include <openrct2/audio/AudioContext.h>
|
||||
#include <openrct2/Context.h>
|
||||
#include <openrct2/core/File.h>
|
||||
#include <openrct2/core/Path.hpp>
|
||||
#include <openrct2/core/String.hpp>
|
||||
#include <openrct2/OpenRCT2.h>
|
||||
#include "TestData.h"
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include <openrct2/platform/platform.h>
|
||||
#include <openrct2/game.h>
|
||||
}
|
||||
|
||||
using namespace OpenRCT2;
|
||||
|
||||
class RideRatings : public testing::Test
|
||||
{
|
||||
protected:
|
||||
void CalculateRatingsForAllRides()
|
||||
{
|
||||
for (int rideId = 0; rideId < MAX_RIDES; rideId++)
|
||||
{
|
||||
rct_ride * ride = get_ride(rideId);
|
||||
if (ride->type != RIDE_TYPE_NULL)
|
||||
{
|
||||
ride_ratings_update_ride(rideId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DumpRatings()
|
||||
{
|
||||
for (int rideId = 0; rideId < MAX_RIDES; rideId++)
|
||||
{
|
||||
rct_ride * ride = get_ride(rideId);
|
||||
if (ride->type != RIDE_TYPE_NULL)
|
||||
{
|
||||
std::string line = FormatRatings(ride);
|
||||
printf("%s\n", line.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string FormatRatings(rct_ride * ride)
|
||||
{
|
||||
rating_tuple ratings = ride->ratings;
|
||||
std::string line = String::StdFormat("%s: (%d, %d, %d)",
|
||||
ride_type_get_enum_name(ride->type),
|
||||
(int)ratings.excitement,
|
||||
(int)ratings.intensity,
|
||||
(int)ratings.nausea);
|
||||
return line;
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(RideRatings, all)
|
||||
{
|
||||
std::string path = TestData::GetParkPath("bpb.sv6");
|
||||
|
||||
gOpenRCT2Headless = true;
|
||||
|
||||
core_init();
|
||||
auto context = CreateContext();
|
||||
bool initialised = context->Initialise();
|
||||
ASSERT_TRUE(initialised);
|
||||
|
||||
game_load_sv6_path(path.c_str());
|
||||
|
||||
// Check ride count to check load was successful
|
||||
ASSERT_EQ(gRideCount, 134);
|
||||
|
||||
CalculateRatingsForAllRides();
|
||||
|
||||
// Load expected ratings
|
||||
auto expectedDataPath = Path::Combine(TestData::GetBasePath(), "ratings", "bpb.sv6.txt");
|
||||
auto expectedRatings = File::ReadAllLines(expectedDataPath);
|
||||
|
||||
// Check ride ratings
|
||||
int expI = 0;
|
||||
for (int rideId = 0; rideId < MAX_RIDES; rideId++)
|
||||
{
|
||||
rct_ride * ride = get_ride(rideId);
|
||||
if (ride->type != RIDE_TYPE_NULL)
|
||||
{
|
||||
std::string actual = FormatRatings(ride);
|
||||
std::string expected = expectedRatings[expI];
|
||||
ASSERT_STREQ(actual.c_str(), expected.c_str());
|
||||
|
||||
expI++;
|
||||
}
|
||||
}
|
||||
|
||||
delete context;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#include <openrct2/core/Path.hpp>
|
||||
#include "TestData.h"
|
||||
|
||||
namespace TestData
|
||||
{
|
||||
std::string GetBasePath()
|
||||
{
|
||||
return "testdata";
|
||||
}
|
||||
|
||||
std::string GetParkPath(std::string name)
|
||||
{
|
||||
std::string path = Path::Combine(GetBasePath(), "parks", name);
|
||||
return path;
|
||||
}
|
||||
};
|
|
@ -0,0 +1,9 @@
|
|||
#include <string>
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace TestData
|
||||
{
|
||||
std::string GetBasePath();
|
||||
std::string GetParkPath(std::string name);
|
||||
};
|
Binary file not shown.
|
@ -0,0 +1,134 @@
|
|||
RIDE_TYPE_CORKSCREW_ROLLER_COASTER: (843, 766, 346)
|
||||
RIDE_TYPE_WOODEN_ROLLER_COASTER: (639, 1011, 626)
|
||||
RIDE_TYPE_WOODEN_ROLLER_COASTER: (702, 734, 428)
|
||||
RIDE_TYPE_MINIATURE_RAILWAY: (465, 37, 27)
|
||||
RIDE_TYPE_LOG_FLUME: (522, 199, 107)
|
||||
RIDE_TYPE_BOBSLEIGH_COASTER: (559, 548, 440)
|
||||
RIDE_TYPE_CORKSCREW_ROLLER_COASTER: (504, 533, 204)
|
||||
RIDE_TYPE_CAR_RIDE: (418, 58, 3)
|
||||
RIDE_TYPE_WOODEN_WILD_MOUSE: (324, 381, 220)
|
||||
RIDE_TYPE_LOG_FLUME: (416, 139, 105)
|
||||
RIDE_TYPE_3D_CINEMA: (350, 240, 140)
|
||||
RIDE_TYPE_HAUNTED_HOUSE: (341, 153, 10)
|
||||
RIDE_TYPE_MONORAIL: (439, 25, 5)
|
||||
RIDE_TYPE_MINI_GOLF: (306, 90, 0)
|
||||
RIDE_TYPE_WOODEN_ROLLER_COASTER: (636, 648, 377)
|
||||
RIDE_TYPE_WOODEN_ROLLER_COASTER: (71, 68, 41)
|
||||
RIDE_TYPE_STEEPLECHASE: (607, 509, 351)
|
||||
RIDE_TYPE_STEEPLECHASE: (590, 492, 338)
|
||||
RIDE_TYPE_JUNIOR_ROLLER_COASTER: (488, 460, 331)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_INFORMATION_KIOSK: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_LOG_FLUME: (133, 37, 19)
|
||||
RIDE_TYPE_CAR_RIDE: (38, 29, 1)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_CROOKED_HOUSE: (215, 62, 34)
|
||||
RIDE_TYPE_MINE_TRAIN_COASTER: (35, 32, 22)
|
||||
RIDE_TYPE_TOILETS: (-1, 0, 0)
|
||||
RIDE_TYPE_DRINK_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_GHOST_TRAIN: (389, 43, 22)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_CAR_RIDE: (40, 29, 2)
|
||||
RIDE_TYPE_SPIRAL_SLIDE: (178, 140, 90)
|
||||
RIDE_TYPE_TWIST: (193, 157, 250)
|
||||
RIDE_TYPE_MERRY_GO_ROUND: (125, 60, 75)
|
||||
RIDE_TYPE_MERRY_GO_ROUND: (106, 60, 75)
|
||||
RIDE_TYPE_DODGEMS: (275, 80, 35)
|
||||
RIDE_TYPE_TWIST: (173, 157, 250)
|
||||
RIDE_TYPE_LAUNCHED_FREEFALL: (379, 879, 543)
|
||||
RIDE_TYPE_BOAT_RIDE: (269, 89, 100)
|
||||
RIDE_TYPE_MOTION_SIMULATOR: (290, 350, 300)
|
||||
RIDE_TYPE_DRINK_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_CHAIRLIFT: (289, 55, 51)
|
||||
RIDE_TYPE_GO_KARTS: (509, 288, 45)
|
||||
RIDE_TYPE_INFORMATION_KIOSK: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_MAZE: (191, 104, 0)
|
||||
RIDE_TYPE_TWIST: (180, 157, 250)
|
||||
RIDE_TYPE_DRINK_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_DRINK_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_TOILETS: (-1, 0, 0)
|
||||
RIDE_TYPE_TOILETS: (-1, 0, 0)
|
||||
RIDE_TYPE_TOILETS: (-1, 0, 0)
|
||||
RIDE_TYPE_TOILETS: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_LOG_FLUME: (586, 268, 172)
|
||||
RIDE_TYPE_INFORMATION_KIOSK: (-1, 0, 0)
|
||||
RIDE_TYPE_WOODEN_ROLLER_COASTER: (124, 150, 87)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 30, 0)
|
||||
RIDE_TYPE_CROOKED_HOUSE: (215, 62, 34)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_DRINK_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_INFORMATION_KIOSK: (-1, 0, 0)
|
||||
RIDE_TYPE_INFORMATION_KIOSK: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_DRINK_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_DODGEMS: (270, 80, 35)
|
||||
RIDE_TYPE_DODGEMS: (274, 80, 35)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_FOOD_STALL: (-1, 0, 0)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_SHOP: (-1, 0, 0)
|
||||
RIDE_TYPE_FIRST_AID: (-1, 0, 0)
|
||||
RIDE_TYPE_CASH_MACHINE: (-1, 0, 0)
|
||||
RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER: (696, 833, 772)
|
||||
RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER: (486, 586, 338)
|
||||
RIDE_TYPE_REVERSER_ROLLER_COASTER: (548, 525, 387)
|
||||
RIDE_TYPE_INVERTED_HAIRPIN_COASTER: (668, 770, 470)
|
||||
RIDE_TYPE_VIRGINIA_REEL: (531, 542, 588)
|
||||
RIDE_TYPE_WILD_MOUSE: (631, 768, 473)
|
||||
RIDE_TYPE_MINI_ROLLER_COASTER: (541, 563, 397)
|
||||
RIDE_TYPE_SPIRAL_ROLLER_COASTER: (613, 373, 215)
|
||||
RIDE_TYPE_LOOPING_ROLLER_COASTER: (467, 441, 182)
|
||||
RIDE_TYPE_STAND_UP_ROLLER_COASTER: (548, 790, 558)
|
||||
RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER: (680, 944, 573)
|
||||
RIDE_TYPE_TWISTER_ROLLER_COASTER: (778, 769, 425)
|
||||
RIDE_TYPE_GIGA_COASTER: (624, 359, 200)
|
||||
RIDE_TYPE_INVERTED_ROLLER_COASTER: (676, 850, 686)
|
||||
RIDE_TYPE_INVERTED_IMPULSE_COASTER: (643, 750, 569)
|
||||
RIDE_TYPE_MINI_SUSPENDED_COASTER: (512, 696, 475)
|
||||
RIDE_TYPE_MINE_RIDE: (644, 458, 381)
|
||||
RIDE_TYPE_HEARTLINE_TWISTER_COASTER: (315, 658, 462)
|
||||
RIDE_TYPE_LAY_DOWN_ROLLER_COASTER: (682, 666, 548)
|
||||
RIDE_TYPE_FLYING_ROLLER_COASTER: (719, 711, 678)
|
||||
RIDE_TYPE_REVERSE_FREEFALL_COASTER: (518, 747, 534)
|
||||
RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER: (641, 618, 282)
|
||||
RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER: (873, 895, 701)
|
||||
RIDE_TYPE_SUSPENDED_MONORAIL: (338, 47, 23)
|
||||
RIDE_TYPE_LIFT: (563, 35, 102)
|
||||
RIDE_TYPE_MONORAIL_CYCLES: (226, 29, 1)
|
||||
RIDE_TYPE_FERRIS_WHEEL: (85, 50, 55)
|
||||
RIDE_TYPE_OBSERVATION_TOWER: (594, 0, 61)
|
||||
RIDE_TYPE_SPIRAL_SLIDE: (157, 140, 90)
|
||||
RIDE_TYPE_SPACE_RINGS: (167, 210, 650)
|
||||
RIDE_TYPE_CIRCUS_SHOW: (210, 30, 0)
|
||||
RIDE_TYPE_FLYING_SAUCERS: (381, 85, 39)
|
||||
RIDE_TYPE_MAGIC_CARPET: (374, 340, 440)
|
||||
RIDE_TYPE_PIRATE_SHIP: (264, 245, 251)
|
||||
RIDE_TYPE_SWINGING_INVERTER_SHIP: (349, 468, 472)
|
||||
RIDE_TYPE_TOP_SPIN: (201, 480, 574)
|
||||
RIDE_TYPE_ROTO_DROP: (395, 1148, 1148)
|
||||
RIDE_TYPE_ENTERPRISE: (392, 647, 764)
|
||||
RIDE_TYPE_RIVER_RAPIDS: (376, 153, 90)
|
||||
RIDE_TYPE_RIVER_RAFTS: (263, 45, 43)
|
||||
RIDE_TYPE_DINGHY_SLIDE: (477, 577, 358)
|
||||
RIDE_TYPE_MINI_HELICOPTERS: (315, 50, 4)
|
||||
RIDE_TYPE_SUSPENDED_SWINGING_COASTER: (692, 691, 720)
|
||||
RIDE_TYPE_COMPACT_INVERTED_COASTER: (679, 830, 698)
|
||||
RIDE_TYPE_SPLASH_BOATS: (474, 204, 113)
|
||||
RIDE_TYPE_SUBMARINE_RIDE: (255, 180, 140)
|
|
@ -44,17 +44,24 @@
|
|||
<AdditionalDependencies>libopenrct2.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<SubSystem>Console</SubSystem>
|
||||
</Link>
|
||||
<PostBuildEvent>
|
||||
<Command>xcopy /EIY "$(ProjectDir)testdata" "$(OutputPath)testdata"</Command>
|
||||
<Message>Copies test data to output directory.</Message>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<!-- Files -->
|
||||
<ItemGroup>
|
||||
<ClInclude Include="AssertHelpers.hpp" />
|
||||
<ClInclude Include="TestData.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="LanguagePackTest.cpp" />
|
||||
<ClCompile Include="IniReaderTest.cpp" />
|
||||
<ClCompile Include="IniWriterTest.cpp" />
|
||||
<ClCompile Include="RideRatings.cpp" />
|
||||
<ClCompile Include="sawyercoding_test.cpp" />
|
||||
<ClCompile Include="$(GtestDir)\src\gtest-all.cc" />
|
||||
<ClCompile Include="TestData.cpp" />
|
||||
<ClCompile Include="tests.cpp" />
|
||||
<ClCompile Include="StringTest.cpp" />
|
||||
</ItemGroup>
|
||||
|
|
Loading…
Reference in New Issue