From 4e6821bd620ebb9dfdddb995be9d9a49f5a13c07 Mon Sep 17 00:00:00 2001 From: dK Date: Sat, 24 Jun 2023 13:19:12 -0700 Subject: [PATCH] this commit resolves #4 --- Community Toolbox/Community Toolbox.yyp | 8 ++- .../demo_NullishCheck/demo_NullishCheck.yy | 2 +- .../suite_CommunityToolboxSuite.gml | 1 + .../suite_MathUtilsSuite.gml | 3 + .../suite_MathUtilsSuite.yy | 11 ++++ .../tests_EucmoddivTests.gml | 59 +++++++++++++++++++ .../tests_EucmoddivTests.yy | 11 ++++ .../scripts/utils_Math/utils_Math.gml | 30 ++++++++++ .../scripts/utils_Math/utils_Math.yy | 11 ++++ 9 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 Community Toolbox/scripts/suite_MathUtilsSuite/suite_MathUtilsSuite.gml create mode 100644 Community Toolbox/scripts/suite_MathUtilsSuite/suite_MathUtilsSuite.yy create mode 100644 Community Toolbox/scripts/tests_EucmoddivTests/tests_EucmoddivTests.gml create mode 100644 Community Toolbox/scripts/tests_EucmoddivTests/tests_EucmoddivTests.yy create mode 100644 Community Toolbox/scripts/utils_Math/utils_Math.gml create mode 100644 Community Toolbox/scripts/utils_Math/utils_Math.yy diff --git a/Community Toolbox/Community Toolbox.yyp b/Community Toolbox/Community Toolbox.yyp index 8da4e79..61c0948 100644 --- a/Community Toolbox/Community Toolbox.yyp +++ b/Community Toolbox/Community Toolbox.yyp @@ -15,6 +15,9 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Alphish","folderPath":"folders/_Packages/Alphish.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Community Toolbox","folderPath":"folders/_Packages/Alphish/Community Toolbox.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Demo","folderPath":"folders/Demo.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Tests","folderPath":"folders/Tests.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Math","folderPath":"folders/Tests/Math.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Misc","folderPath":"folders/Tests/Misc.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Verrific","folderPath":"folders/Tests/Verrific.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Runtime","folderPath":"folders/Tests/Verrific/Runtime.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Testing","folderPath":"folders/Tests/Verrific/Testing.yy",}, @@ -23,8 +26,6 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Method-based","folderPath":"folders/Tests/Verrific/Testing/Method-based.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Tools","folderPath":"folders/Tests/Verrific/Tools.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Log","folderPath":"folders/Tests/Verrific/Tools/Log.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Tests","folderPath":"folders/Tests.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Misc","folderPath":"folders/Tests/Misc.yy",}, ], "IncludedFiles": [], "isEcma": false, @@ -49,6 +50,7 @@ {"id":{"name":"struct_VerrificLogRunner","path":"scripts/struct_VerrificLogRunner/struct_VerrificLogRunner.yy",},}, {"id":{"name":"struct_VerrificNumericAssertion","path":"scripts/struct_VerrificNumericAssertion/struct_VerrificNumericAssertion.yy",},}, {"id":{"name":"tests_IsDefinedTests","path":"scripts/tests_IsDefinedTests/tests_IsDefinedTests.yy",},}, + {"id":{"name":"tests_EucmoddivTests","path":"scripts/tests_EucmoddivTests/tests_EucmoddivTests.yy",},}, {"id":{"name":"struct_VerrificFailure","path":"scripts/struct_VerrificFailure/struct_VerrificFailure.yy",},}, {"id":{"name":"ui_VerrificLogView","path":"objects/ui_VerrificLogView/ui_VerrificLogView.yy",},}, {"id":{"name":"struct_VerrificTreeNode","path":"scripts/struct_VerrificTreeNode/struct_VerrificTreeNode.yy",},}, @@ -61,8 +63,10 @@ {"id":{"name":"fnt_VerrificLogLine","path":"fonts/fnt_VerrificLogLine/fnt_VerrificLogLine.yy",},}, {"id":{"name":"suite_CommunityToolboxSuite","path":"scripts/suite_CommunityToolboxSuite/suite_CommunityToolboxSuite.yy",},}, {"id":{"name":"struct_VerrificBreak","path":"scripts/struct_VerrificBreak/struct_VerrificBreak.yy",},}, + {"id":{"name":"suite_MathUtilsSuite","path":"scripts/suite_MathUtilsSuite/suite_MathUtilsSuite.yy",},}, {"id":{"name":"struct_VerrificSuiteGroup","path":"scripts/struct_VerrificSuiteGroup/struct_VerrificSuiteGroup.yy",},}, {"id":{"name":"struct_VerrificTest","path":"scripts/struct_VerrificTest/struct_VerrificTest.yy",},}, + {"id":{"name":"utils_Math","path":"scripts/utils_Math/utils_Math.yy",},}, {"id":{"name":"struct_VerrificMethodTest","path":"scripts/struct_VerrificMethodTest/struct_VerrificMethodTest.yy",},}, {"id":{"name":"struct_VerrificLogLine","path":"scripts/struct_VerrificLogLine/struct_VerrificLogLine.yy",},}, {"id":{"name":"struct_VerrificStatusCounter","path":"scripts/struct_VerrificStatusCounter/struct_VerrificStatusCounter.yy",},}, diff --git a/Community Toolbox/rooms/demo_NullishCheck/demo_NullishCheck.yy b/Community Toolbox/rooms/demo_NullishCheck/demo_NullishCheck.yy index 3e5170e..95156c3 100644 --- a/Community Toolbox/rooms/demo_NullishCheck/demo_NullishCheck.yy +++ b/Community Toolbox/rooms/demo_NullishCheck/demo_NullishCheck.yy @@ -2,7 +2,7 @@ "resourceType": "GMRoom", "resourceVersion": "1.0", "name": "demo_NullishCheck", - "creationCodeFile": "", + "creationCodeFile": "rooms/demo_NullishCheck/RoomCreationCode.gml", "inheritCode": false, "inheritCreationOrder": false, "inheritLayers": false, diff --git a/Community Toolbox/scripts/suite_CommunityToolboxSuite/suite_CommunityToolboxSuite.gml b/Community Toolbox/scripts/suite_CommunityToolboxSuite/suite_CommunityToolboxSuite.gml index 5f8f891..8f87b9e 100644 --- a/Community Toolbox/scripts/suite_CommunityToolboxSuite/suite_CommunityToolboxSuite.gml +++ b/Community Toolbox/scripts/suite_CommunityToolboxSuite/suite_CommunityToolboxSuite.gml @@ -1,3 +1,4 @@ function CommunityToolboxSuite() : VerrificSuiteGroup("Community toolbox tests") constructor { add_suite(new MiscUtilsSuite()); + add_suite(new MathUtilsSuite()); } diff --git a/Community Toolbox/scripts/suite_MathUtilsSuite/suite_MathUtilsSuite.gml b/Community Toolbox/scripts/suite_MathUtilsSuite/suite_MathUtilsSuite.gml new file mode 100644 index 0000000..dfa6167 --- /dev/null +++ b/Community Toolbox/scripts/suite_MathUtilsSuite/suite_MathUtilsSuite.gml @@ -0,0 +1,3 @@ +function MathUtilsSuite() : VerrificSuiteGroup("Math utilities tests") constructor { + add_methods_from(EucmoddivTests); +} \ No newline at end of file diff --git a/Community Toolbox/scripts/suite_MathUtilsSuite/suite_MathUtilsSuite.yy b/Community Toolbox/scripts/suite_MathUtilsSuite/suite_MathUtilsSuite.yy new file mode 100644 index 0000000..740f789 --- /dev/null +++ b/Community Toolbox/scripts/suite_MathUtilsSuite/suite_MathUtilsSuite.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "suite_MathUtilsSuite", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "Math", + "path": "folders/Tests/Math.yy", + }, +} \ No newline at end of file diff --git a/Community Toolbox/scripts/tests_EucmoddivTests/tests_EucmoddivTests.gml b/Community Toolbox/scripts/tests_EucmoddivTests/tests_EucmoddivTests.gml new file mode 100644 index 0000000..9949e49 --- /dev/null +++ b/Community Toolbox/scripts/tests_EucmoddivTests/tests_EucmoddivTests.gml @@ -0,0 +1,59 @@ +function EucmoddivTests(_run, _method) : VerrificMethodTest(_run, _method) constructor { + static test_subject = "eucmod/eucdiv"; + static should_be_positive_eucmod_pos_pos = function() { + _a = 7; + _b = 3; + _r = eucmod(_a,_b); + assert_is_true( _r >= 0 && _r < abs(_b)); + } + + static should_be_positive_eucmod_pos_neg = function() { + _a = 7; + _b = -3; + _r = eucmod(_a,_b); + assert_is_true( _r >= 0 && _r < abs(_b)); + } + + static should_be_positive_eucmod_neg_pos = function() { + _a = -7; + _b = 3; + _r = eucmod(_a,_b); + assert_is_true( _r >= 0 && _r < abs(_b)); + } + + static should_be_positive_eucmod_neg_neg = function() { + _a = -7; + _b = -3; + _r = eucmod(_a,_b); + assert_is_true( _r >= 0 && _r < abs(_b)); + } + + static should_equal_dividend_pos_pos = function() { + _a = 7; + _b = 3; + _result = eucdiv(_a, _b) * _b + eucmod(_a, _b); + assert_is_true(_a == _result); + } + + static should_equal_dividend_pos_neg = function() { + _a = 7; + _b = -3; + _result = eucdiv(_a, _b) * _b + eucmod(_a, _b); + assert_is_true(_a == _result); + } + + static should_equal_dividend_neg_pos = function() { + _a = -7; + _b = 3; + _result = eucdiv(_a, _b) * _b + eucmod(_a, _b); + assert_is_true(_a == _result); + } + + static should_equal_dividend_neg_neg = function() { + _a = -7; + _b = -3; + _result = eucdiv(_a, _b) * _b + eucmod(_a, _b); + assert_is_true(_a == _result); + } + +} \ No newline at end of file diff --git a/Community Toolbox/scripts/tests_EucmoddivTests/tests_EucmoddivTests.yy b/Community Toolbox/scripts/tests_EucmoddivTests/tests_EucmoddivTests.yy new file mode 100644 index 0000000..dd36171 --- /dev/null +++ b/Community Toolbox/scripts/tests_EucmoddivTests/tests_EucmoddivTests.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "tests_EucmoddivTests", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "Math", + "path": "folders/Tests/Math.yy", + }, +} \ No newline at end of file diff --git a/Community Toolbox/scripts/utils_Math/utils_Math.gml b/Community Toolbox/scripts/utils_Math/utils_Math.gml new file mode 100644 index 0000000..ad7145c --- /dev/null +++ b/Community Toolbox/scripts/utils_Math/utils_Math.gml @@ -0,0 +1,30 @@ +/// @func eucmod(dvnd,dvsr) +/// @desc Calculates a remainder from the Euclidian division (the remainder will always be non-negative). +/// @arg {Real} dvnd The value to divide, or dividend. +/// @arg {Real} dvsr The value to divide by, or divisor. +/// @returns {Real} +function eucmod(_dvnd,_dvsr){ + _r = _dvnd%_dvsr; + if (_r > 0) + return _r; + else if (_dvsr > 0) + return _r + _dvsr; + else + return _r - _dvsr; +} + +/// @func eucdiv(dvnd,dvsr) +/// @desc Calculates an integer quotient of the Euclidian division (i.e. with non-negative remainder). +/// @arg {Real} dvnd The value to divide, or dividend. +/// @arg {Real} dvsr The value to divide by, or divisor. +/// @returns {Real} +function eucdiv(_dvnd,_dvsr){ + _q = _dvnd div _dvsr; + + if (_dvnd > 0) + return _q; + else if (_dvsr > 0) + return _q - 1; + else + return _q + 1; +} diff --git a/Community Toolbox/scripts/utils_Math/utils_Math.yy b/Community Toolbox/scripts/utils_Math/utils_Math.yy new file mode 100644 index 0000000..901f00f --- /dev/null +++ b/Community Toolbox/scripts/utils_Math/utils_Math.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "utils_Math", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "Community Toolbox", + "path": "folders/_Packages/Alphish/Community Toolbox.yy", + }, +} \ No newline at end of file