/* * test_byref.prg — @byref pass-by-reference test */ STATIC s_nPass := 0 STATIC s_nFail := 0 PROCEDURE Main() ? "=== @byref Test Suite ===" ? TestBasicByref() TestChainedByref() TestByrefInLoop() TestByrefPreservesType() ? ? "Results:", hb_ntos(s_nPass), "/", hb_ntos(s_nPass + s_nFail), "passed" RETURN STATIC PROCEDURE TestBasicByref() LOCAL nVal := 10 ModifyByRef(@nVal) Assert("Basic @byref: nVal changed to 42", nVal == 42) RETURN STATIC FUNCTION ModifyByRef(nParam) nParam := 42 RETURN NIL STATIC PROCEDURE TestChainedByref() LOCAL nVal := 100 MiddleMan(@nVal) Assert("Chained @byref: nVal changed to 999", nVal == 999) RETURN STATIC FUNCTION MiddleMan(x) InnerModify(@x) RETURN NIL STATIC FUNCTION InnerModify(y) y := 999 RETURN NIL STATIC PROCEDURE TestByrefInLoop() LOCAL nSum := 0 LOCAL i FOR i := 1 TO 5 AddToByRef(@nSum, i) NEXT Assert("@byref in loop: sum 1..5 = 15", nSum == 15) RETURN STATIC FUNCTION AddToByRef(nAcc, nVal) nAcc := nAcc + nVal RETURN NIL STATIC PROCEDURE TestByrefPreservesType() LOCAL cStr := "hello" AppendByRef(@cStr, " world") Assert("@byref string: 'hello world'", cStr == "hello world") RETURN STATIC FUNCTION AppendByRef(cParam, cSuffix) cParam := cParam + cSuffix RETURN NIL STATIC FUNCTION Assert(cLabel, lOK) IF lOK s_nPass++ ? " PASS:", cLabel ELSE s_nFail++ ? " FAIL:", cLabel ENDIF RETURN NIL