mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-22 01:55:25 -04:00
139 lines
4.8 KiB
C++
139 lines
4.8 KiB
C++
/*
|
|
* GDevelop Core
|
|
* Copyright 2008-2014 Florian Rival (Florian.Rival@gmail.com). All rights reserved.
|
|
* This project is released under the GNU Lesser General Public License.
|
|
*/
|
|
/**
|
|
* @file Tests covering common features of GDevelop Core.
|
|
*/
|
|
#include "catch.hpp"
|
|
#include "GDCore/CommonTools.h"
|
|
#include "GDCore/Tools/SystemStats.h"
|
|
#include "GDCore/Tools/VersionWrapper.h"
|
|
#include "GDCore/PlatformDefinition/Project.h"
|
|
#include "GDCore/PlatformDefinition/Layout.h"
|
|
#include "GDCore/PlatformDefinition/Variable.h"
|
|
#include "GDCore/Events/EventsList.h"
|
|
#include "GDCore/Events/Event.h"
|
|
#include "GDCore/Events/Builtin/StandardEvent.h"
|
|
#include "GDCore/Events/Serialization.h"
|
|
#include "GDCore/Serialization/Serializer.h"
|
|
|
|
TEST_CASE( "Common tools", "[common]" ) {
|
|
REQUIRE( gd::ToInt("1") == 1 );
|
|
REQUIRE( gd::ToString(2) == "2" );
|
|
}
|
|
|
|
TEST_CASE( "Project", "[common]" ) {
|
|
SECTION("Basics") {
|
|
gd::Project project;
|
|
project.SetName("myname");
|
|
REQUIRE( project.GetName() == "myname" );
|
|
}
|
|
}
|
|
|
|
TEST_CASE( "Variable", "[common]" ) {
|
|
SECTION("Basics") {
|
|
gd::Variable variable;
|
|
variable.SetValue(50);
|
|
REQUIRE( variable.GetValue() == 50 );
|
|
REQUIRE( variable == 50 );
|
|
REQUIRE( variable.IsNumber() == true );
|
|
REQUIRE( variable.IsStructure() == false );
|
|
|
|
variable.SetString("MyString");
|
|
REQUIRE( variable.GetString() == "MyString" );
|
|
REQUIRE( variable == "MyString" );
|
|
REQUIRE( variable.IsNumber() == false );
|
|
REQUIRE( variable.IsStructure() == false );
|
|
}
|
|
SECTION("Conversions") {
|
|
gd::Variable variable;
|
|
variable.SetValue(50);
|
|
REQUIRE( variable.GetString() == "50" ); //Used as a string...
|
|
REQUIRE( variable.IsNumber() == false ); //...so consider as a string
|
|
|
|
variable.SetString("MyString");
|
|
REQUIRE( variable.GetValue() == 0 ); //Used as a number...
|
|
REQUIRE( variable.IsNumber() == true ); //...so consider as a number
|
|
}
|
|
SECTION("Use with int and string like semantics") {
|
|
gd::Variable variable;
|
|
variable = 50;
|
|
REQUIRE( variable.GetValue() == 50 );
|
|
REQUIRE( variable.IsNumber() == true );
|
|
|
|
variable = "MyString";
|
|
REQUIRE( variable.GetString() == "MyString" );
|
|
REQUIRE( variable.IsNumber() == false );
|
|
|
|
variable = std::string("MyRealStdString");
|
|
REQUIRE( variable.GetString() == "MyRealStdString" );
|
|
REQUIRE( variable.IsNumber() == false );
|
|
}
|
|
}
|
|
|
|
TEST_CASE( "EventsList", "[common][events]" ) {
|
|
SECTION("Basics") {
|
|
gd::EventsList list;
|
|
gd::EmptyEvent event1;
|
|
boost::shared_ptr<gd::BaseEvent> event2(new gd::EmptyEvent);
|
|
list.InsertEvent(event1);
|
|
list.InsertEvent(event2);
|
|
REQUIRE( &list.GetEvent(0) != &event1 ); //First event inserted by copy
|
|
REQUIRE( &list.GetEvent(1) == event2.get() ); //Second event not copied
|
|
}
|
|
|
|
SECTION("Subevents") {
|
|
gd::EventsList list;
|
|
gd::StandardEvent stdEvent;
|
|
list.InsertEvent(stdEvent, 0);
|
|
|
|
//Create a lots of nested events
|
|
gd::BaseEvent * lastEvent = &list.GetEvent(0);
|
|
gd::BaseEvent * oneOfTheSubEvent = NULL;
|
|
for(unsigned int i=0;i<100;++i) {
|
|
gd::StandardEvent subEvent;
|
|
lastEvent = &lastEvent->GetSubEvents().InsertEvent(subEvent);
|
|
if ( i == 60 ) oneOfTheSubEvent = lastEvent;
|
|
}
|
|
|
|
//Check if Contains method can find the specified sub event.
|
|
REQUIRE(list.Contains(*oneOfTheSubEvent) == true);
|
|
REQUIRE(list.Contains(*oneOfTheSubEvent, false) == false);
|
|
}
|
|
|
|
SECTION("Memory consumption") {
|
|
size_t startMemory = gd::SystemStats::GetUsedVirtualMemory();
|
|
|
|
gd::EventsList list;
|
|
gd::StandardEvent stdEvent;
|
|
list.InsertEvent(stdEvent, 0);
|
|
|
|
//Create a lots of nested events
|
|
gd::BaseEvent * lastEvent = &list.GetEvent(0);
|
|
for(unsigned int i=0;i<2000;++i) {
|
|
gd::StandardEvent subEvent;
|
|
lastEvent = &lastEvent->GetSubEvents().InsertEvent(subEvent);
|
|
}
|
|
|
|
//Copy the result
|
|
gd::EventsList copiedList = list;
|
|
|
|
size_t endMemory = gd::SystemStats::GetUsedVirtualMemory();
|
|
INFO("Memory used: " << endMemory-startMemory << "KB");
|
|
REQUIRE(1500 >= endMemory-startMemory);
|
|
}
|
|
|
|
}
|
|
|
|
TEST_CASE( "VersionWrapper", "[common]" ) {
|
|
REQUIRE( gd::VersionWrapper::IsOlder(1,9,9,9,2,0,0,0) == true );
|
|
REQUIRE( gd::VersionWrapper::IsOlder(2,0,0,0,1,9,9,9) == false );
|
|
REQUIRE( gd::VersionWrapper::IsOlder(2,1,9,9,2,1,9,9) == false );
|
|
REQUIRE( gd::VersionWrapper::IsOlder(2,1,9,9,2,2,0,0) == true );
|
|
REQUIRE( gd::VersionWrapper::IsOlder(2,1,0,9,2,2,0,9) == true );
|
|
REQUIRE( gd::VersionWrapper::IsOlder(2,1,0,9,2,1,1,0) == true );
|
|
REQUIRE( gd::VersionWrapper::IsOlderOrEqual(2,1,9,9,2,1,9,9) == true );
|
|
}
|