fix CBA_fnc_findMin, improve CBA_fnc_findMax #207

Merged
merged 3 commits into from Dec 2, 2015

Projects

None yet

3 participants

@commy2
Contributor
commy2 commented Dec 2, 2015

[0,4,3,-2,1,5,2] call CBA_fnc_findMax

old method: 0.121507 ms for (8238/10000) loops
new method: 0.0360001 ms for (10000/10000) loops

CBA_fnc_findMin was broken.

@commy2 commy2 referenced this pull request Dec 2, 2015
Merged

private keyword #204

@MikeMatrix
Contributor

👍

@Killswitch00
Contributor

The array unit tests fail. To reproduce, run
h=[] spawn CBA_fnc_testArrays

18:52:33 Error in expression <riptName 'cba\arrays\findMax';[_this] params [["_array", [], [[]]]];if !(_ar>
18:52:33   Error position: <params [["_array", [], [[]]]];if !(_ar>
18:52:33   Error Params: Type Array, expected String
18:52:33 File x\cba\addons\arrays\fnc_findMax.sqf, line 5
@commy2
Contributor
commy2 commented Dec 2, 2015

There are some errors from other functions as well, which is strange, because this PR only changes
findMin and findMax.

Errors from findMin and findMax are:

19:08:33 Error in expression <riptName 'cba\arrays\findMax';

[_this] params [["_array", [], [[]]]];

if !(_ar>
19:08:33   Error position: <params [["_array", [], [[]]]];

if !(_ar>
19:08:33   Error Params: Type Array, expected String
19:08:33 File x\cba\addons\arrays\fnc_findMax.sqf, line 5
19:08:33 [7563,174.311,12.844,"x\cba\addons\arrays\test_findMax.sqf:13","Testing CBA_fnc_findMax"]
19:08:33 [7563,174.311,12.844,"x\cba\addons\arrays\test_findMax.sqf:15","Test OK: (CBA_fnc_findMax is defined)"]
19:08:33 [7563,174.311,12.844,"x\cba\addons\arrays\test_findMax.sqf:20","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7563,174.311,12.844,"x\cba\addons\arrays\test_findMax.sqf:25","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7563,174.311,12.844,"x\cba\addons\arrays\test_findMax.sqf:30","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7563,174.311,12.844,"x\cba\addons\arrays\test_findMax.sqf:35","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7563,174.312,12.844,"x\cba\addons\arrays\test_findMax.sqf:40","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7563,174.312,12.844,"x\cba\addons\arrays\test_findMax.sqf:45","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7563,174.312,12.844,"x\cba\addons\arrays\test_findMax.sqf:49","Test OK: (isNil "_result")"]
19:08:33 [7563,174.312,12.844,"x\cba\addons\arrays\test_findMax.sqf:53","Test OK: (isNil "_result")"]
19:08:33 [7563,174.312,12.844,"x\cba\addons\arrays\test_findMax.sqf:57","Test OK: (isNil "_result")"]
19:08:33 [7563,174.312,12.844,"x\cba\addons\arrays\test_findMax.sqf:61","Test OK: (isNil "_result")"]
19:08:33 [7563,174.312,12.844,"x\cba\addons\arrays\test_findMax.sqf:65","Test OK: (isNil "_result")"]
19:08:33 Error in expression <riptName 'cba\arrays\findMin';

[_this] params [["_array", [], [[]]]];

if !(_ar>
19:08:33   Error position: <params [["_array", [], [[]]]];

if !(_ar>
19:08:33   Error Params: Type Array, expected String
19:08:33 File x\cba\addons\arrays\fnc_findMin.sqf, line 5
19:08:33 [7564,174.323,12.844,"x\cba\addons\arrays\test_findMin.sqf:12","Testing CBA_fnc_findMin"]
19:08:33 [7564,174.323,12.844,"x\cba\addons\arrays\test_findMin.sqf:14","Test OK: (CBA_fnc_findMin is defined)"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:19","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:24","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:29","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:34","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:39","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:44","Test OK: (_result isEqualTo _expected)"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:48","Test OK: (isNil "_result")"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:52","Test OK: (isNil "_result")"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:56","Test OK: (isNil "_result")"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:60","Test OK: (isNil "_result")"]
19:08:33 [7564,174.324,12.844,"x\cba\addons\arrays\test_findMin.sqf:64","Test OK: (isNil "_result")"]
@commy2
Contributor
commy2 commented Dec 2, 2015

Seems like the results are all as expected and the error is the on screen warning from params alternate syntax when using wrong types as function arguments (intentional).

Note that it says Error Params: Type Array, expected String which should be the other way around. (Bug from BI)

@commy2
Contributor
commy2 commented Dec 2, 2015

Commenting out these two tests removes the on screen / rpt warnings for findMin and findMax.

// Test invalid array given
_result = "not an array" call CBA_fnc_findMax;
TEST_TRUE(isNil "_result",_fn);
// Test invalid array given
_result = "not an array" call CBA_fnc_findMin;
TEST_TRUE(isNil "_result",_fn);

https://community.bistudio.com/wiki/params

In addition to simple parsing directly into variables, input can be tested in case it is undefined, of the wrong type or of the wrong size (if array) and substituted if necessary with default values. Since Arma 3 v1.53.132691, onscreen errors are displayed for when the input is of the wrong type or size.

@Killswitch00
Contributor

That explains it. Thanks for the sciencing!

@Killswitch00 Killswitch00 merged commit e23bea7 into master Dec 2, 2015
@Killswitch00 Killswitch00 added this to the 2.2.1 milestone Dec 3, 2015
@Killswitch00 Killswitch00 deleted the findMinMaxImprovements branch Jan 9, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment