[Scummvm-git-logs] scummvm master -> f8f3c49df31d32a50ab2058f32e8c2176f624464

sev- noreply at scummvm.org
Thu Jan 23 18:04:54 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
f8f3c49df3 DIRECTOR: LINGO: Fix implementation of findPosNear, add relevant tests


Commit: f8f3c49df31d32a50ab2058f32e8c2176f624464
    https://github.com/scummvm/scummvm/commit/f8f3c49df31d32a50ab2058f32e8c2176f624464
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-01-23T19:04:27+01:00

Commit Message:
DIRECTOR: LINGO: Fix implementation of findPosNear, add relevant tests

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/tests/lists.lingo


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 26028e94506..d60010d16e8 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -799,12 +799,17 @@ void LB::b_findPos(int nargs) {
 void LB::b_findPosNear(int nargs) {
 	Common::String prop = g_lingo->pop().asString();
 	Datum list = g_lingo->pop();
-	Datum res(0);
+	Datum res;
 	TYPECHECK(list, PARRAY);
 
 	// FIXME: Integrate with compareTo framework
 	prop.toLowercase();
 
+	// This requires more testing, but D4-D6 test show that it does not work as described.
+	// The example:
+	//   findPosNear([#Nile:2, #Pharaoh:4, #Raja:0], #Ni)  supposed to return 1, for #Nile, but it returns 4
+	res = Datum((int)list.u.parr->arr.size() + 1); // Set it to the end of array by default
+
 	for (uint i = 0; i < list.u.parr->arr.size(); i++) {
 		Datum p = list.u.parr->arr[i].p;
 		Common::String tgt = p.asString();
diff --git a/engines/director/lingo/tests/lists.lingo b/engines/director/lingo/tests/lists.lingo
index 7471885ad48..3e76fda9634 100644
--- a/engines/director/lingo/tests/lists.lingo
+++ b/engines/director/lingo/tests/lists.lingo
@@ -228,11 +228,13 @@ scummvmAssertEqual(testList, [5, "URGH", 3, 1])
 
 
 -- findPos
-set testList to [#a: 1, #b: 2, #c: 3, #d: 4, #e: 5]
+set testList to [#a: 1, #b: 2, #bb: 3, #d: 4, #e: 5]
 scummvmAssertEqual(findPos(testList, #b), 2)
 scummvmAssertEqual(findPos(testList, #f), VOID)
 
 -- findPosNear
+scummvmAssertEqual(findPosNear(testList, #f), 6)
+scummvmAssertEqual(findPosNear(testList, #d), 4)
 
 
 -- getaProp




More information about the Scummvm-git-logs mailing list