From 7829631f66ba86f66735cf31fe49967c8cd76621 Mon Sep 17 00:00:00 2001 From: Nicolas Hake Date: Sun, 1 Sep 2013 00:35:15 +0200 Subject: [PATCH] Add test case for #973 --- planet/Issues.ocf/issue973.ocs/Scenario.txt | 5 ++ planet/Issues.ocf/issue973.ocs/Script.c | 54 +++++++++++++++++++++ planet/Issues.ocf/issue973.ocs/Title.txt | 1 + 3 files changed, 60 insertions(+) create mode 100644 planet/Issues.ocf/issue973.ocs/Scenario.txt create mode 100644 planet/Issues.ocf/issue973.ocs/Script.c create mode 100644 planet/Issues.ocf/issue973.ocs/Title.txt diff --git a/planet/Issues.ocf/issue973.ocs/Scenario.txt b/planet/Issues.ocf/issue973.ocs/Scenario.txt new file mode 100644 index 000000000..55cd39a0b --- /dev/null +++ b/planet/Issues.ocf/issue973.ocs/Scenario.txt @@ -0,0 +1,5 @@ +[Head] +Title=Test case for #973 + +[Definitions] +LocalOnly=1 diff --git a/planet/Issues.ocf/issue973.ocs/Script.c b/planet/Issues.ocf/issue973.ocs/Script.c new file mode 100644 index 000000000..1c4e848ec --- /dev/null +++ b/planet/Issues.ocf/issue973.ocs/Script.c @@ -0,0 +1,54 @@ +/* + * OpenClonk, http://www.openclonk.org + * + * Copyright (c) 2013 Nicolas Hake + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * See isc_license.txt for full license and disclaimer. + * + * "Clonk" is a registered trademark of Matthes Bender. + * See clonk_trademark_license.txt for full license. + */ + +/* Issue #973: {Find,Sort}_* with no origin should use the FindObject call's + * context object instead of 0,0 */ + +func Initialize() +{ + // Setup testing environment: one object for context, a second object at the context object, one object at 0,0 + var ctx = CreateObject(Dummy, 100, 100, NO_OWNER); + ctx->SetName("ctx"); + var at_origin = CreateObject(Dummy, 0, 0, NO_OWNER); + at_origin->SetName("at_origin"); + var at_object = CreateObject(Dummy, ctx->GetX(), ctx->GetY(), NO_OWNER); + at_object->SetName("at_object"); + + TEST("object context Find_Distance"); + EXPECT_EQ(at_object, ctx->FindObject(Find_Exclude(ctx), Find_Distance(1))); + + TEST("global context Find_Distance"); + EXPECT_EQ(at_origin, FindObject(Find_Exclude(ctx), Find_Distance(1, at_origin->GetX(), at_origin->GetY()))); + EXPECT_EQ(at_object, FindObject(Find_Exclude(ctx), Find_Distance(1, at_object->GetX(), at_object->GetY()))); + + TEST("object context Find_InRect"); + EXPECT_EQ(at_object, ctx->FindObject(Find_Exclude(ctx), Find_InRect(0, 0, 1, 1))); + EXPECT_EQ(at_origin, ctx->FindObject(Find_Exclude(ctx), Find_InRect(-ctx->GetX(), -ctx->GetY(), 1, 1))); + + TEST("global context Find_InRect"); + EXPECT_EQ(at_origin, FindObject(Find_Exclude(ctx), Find_InRect(at_origin->GetX(), at_origin->GetY(), 1, 1))); + EXPECT_EQ(at_object, FindObject(Find_Exclude(ctx), Find_InRect(at_object->GetX(), at_object->GetY(), 1, 1))); + + TEST("object context Sort_Distance"); + EXPECT_EQ(at_object, ctx->FindObject(Find_Exclude(ctx), Sort_Distance() )); + EXPECT_EQ(at_origin, ctx->FindObject(Find_Exclude(ctx), Sort_Reverse(Sort_Distance()))); + + TEST("global context Sort_Distance"); + EXPECT_EQ(at_object, FindObject(Find_Exclude(ctx), Sort_Distance(at_object->GetX(), at_object->GetY()) )); + EXPECT_EQ(at_origin, FindObject(Find_Exclude(ctx), Sort_Distance(at_origin->GetX(), at_origin->GetY()) )); + EXPECT_EQ(at_object, FindObject(Find_Exclude(ctx), Sort_Reverse(Sort_Distance(at_origin->GetX(), at_origin->GetY())))); + + END_TEST(); + GameOver(); +} diff --git a/planet/Issues.ocf/issue973.ocs/Title.txt b/planet/Issues.ocf/issue973.ocs/Title.txt new file mode 100644 index 000000000..da4f8f9e5 --- /dev/null +++ b/planet/Issues.ocf/issue973.ocs/Title.txt @@ -0,0 +1 @@ +US:#973: Find_Distance should respect FindObject context