For In
Demonstrate how For IN loops work.
program TestForIn; {$assertions ON} var item:Int32; resStr:String; //=================================================\\ const staticArr: Array [3..7] of Int32 = [0,1,2,3,4]; begin resStr := ''; for item in staticArr do resStr := resStr + ToString(item); Assert(resstr = '01234'); Writeln('Static Array Passed.'); end; //=================================================\\ var dynArr:Array of Int32 = [0..4]; begin resStr := ''; for item in dynArr do resStr := resStr + ToString(item); Assert(resstr = '01234'); Writeln('Dynamic Array Passed.'); end; //=================================================\\ begin resStr := ''; for item in [0,1,2,3,4] do resStr := resStr + ToString(item); Assert(resStr = '01234'); Writeln('Static Set Passed.'); end; //=================================================\\ var c:Char; sstr:ShortString = 'shortstr'; begin resStr := ''; for c in sstr do resStr := resStr + c; Assert(resStr = sstr); Writeln('Short String Passed.'); end; //=================================================\\ var ch:Char; _str:String = 'string'; begin resStr := ''; for ch in _str do resStr := resStr + ch; Assert(resStr = _str); Writeln('Huge String Passed.'); end; //===| Special tests |============================\\ var evalCount:Int32=0; function SideEffect(): Array of Int32; begin Inc(evalCount); Result := [5,4,3,2,1,0]; end; begin for item in SideEffect() do continue; Assert(evalCount = 1); Writeln('Function Result Passed.'); end; //---| make sure locks are working |---\ var c1,c2,c3:Char; txt:string = 'abcdefg'; begin for c1 in txt do for c2 in txt do for c3 in txt do ; Assert((c1 = 'g') and (c2 = 'g') and (c3 = 'g')); Writeln('Nested Passed.'); end;
Output: Static Array Passed. Dynamic Array Passed. Static Set Passed. Short String Passed. Huge String Passed. Function Result Passed. Nested Passed.