On Thu, Feb 20, 2014 at 12:11 AM, Richmond <richmondmathew...@gmail.com>wrote:
> > Rather than repeat things endlessly here, I would urge interested parties > to download the stack, mess around with it, > and crack open the scripts of the 2 buttons. > > In line with Geoff's recent post about riding the world of repeat loops which aren't 'repeat for each' because of the huge benefit of scaling repeat for each has over other forms, I thought I'd benchmark your code. My results for 1,000,000 Unicode chars Your Repeat Until = 237621 ms Repeat for each = 0 ms I couldn't believe it either so you'll see I inserted a breakpoint in my code just to cofirm it was actually recording the time correctly - but unless you use the Debugger and step through code checking variable values this may be obvious. So I commented out your repeat and then tested repeat for each only and it wasn't until 819,200,000 Unicode characters did I get a 1 ms test time. After that I started crashing LC as I assume I was hitting some limit. , In a New Stack, in a new button - the output is directed to the Message Box: on mouseUp --breakpoint --create a random list of 20 ASCII chars between ASCII32 - ASCII 125 repeat 20 times put numToChar(random(94) + 31) after tLIST end repeat ask "How many characters do you want to process" with 100000 titled "Enter Digits Only - No Punctuation" put it into tNumOfChars answer "Do you wish to test against Unicode chars?" with "Yes" or "No" titled "Test Unicode" put it into tUniCode if (tUniCode = "Yes") then set the useUnicode to true put 65535 into tUpperLimit else put 255 into tUpperLimit end if repeat tNumOfChars times put numToChar(random(tUpperLimit)) after tORIGIN end repeat --so the 2nd test is identical put tORIGIN into tORGIN2 --TEST 1 TIMING put the millisec into tStartTime repeat until tORIGIN is empty if tLIST contains the first char of tORIGIN then put the first char of tORIGIN after tOUTPUT delete the first char of tORIGIN else delete the first char of tORIGIN end if --put $ORIGIN into fld "fORIGIN2"--not required end repeat put tOUTPUT into tTest1 put the millisec into tEndTime put tEndTime - tStartTime into tTest1Time --TEST 2 TIMING put the millisec into tStartTime repeat for each char tChar in tORIGIN2 if (tLIST contains tChar) then put tCHAR after tOUTPUT2 end if end repeat put tOUTPUT into tTest2 --breakpoint put the millisec into tEndTime put tEndTime - tStartTime into tTest2Time if (tTest1 = tTest2) then put "Repeat Until: " & tTest1Time & cr & \ "Repeat for Each: " & tTest2Time into msg else put "Failed - Outputs not equal" into msg end if beep --breakpoint end mouseUp _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode