home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-03-19 | 4.1 KB | 157 lines | [TEXT/R*ch] |
- /*
- ** Copyright: © Michael S. Engber, 1994. All Rights Reserved.
- **
- ** Project Data for TimeWars
- **
- ** This project illustrates the differences between different
- ** ways of storing data in your package.
- **
- ** benchmark
- ** Data Structure time (ticks)
- ** -------------------- ------------
- ** array of frames 755
- ** array of arrays 725
- ** frame of frames (60)97
- ** binary object 1001
- ** soup 420
- ** store part 343
- **
- */
-
- constant kAppString := "TimeWars:Avarice";
-
-
- Load(Home & ":Data.f");
- Load(Home & ":DataUtils.f");
- Load(Home & ":SearchUtils.f");
-
- constant kDataStructure := 'ArrayOfFramesCommonMap;
-
- //data sets
- DefConst('kArrayOfFramesData,CloneWithCommonMap(gData));
- DefConst('kArrayOfArraysData,DataToArrays(gData));
- DefConst('kFrameOfFramesData,DataToFrame(gData));
- DefConst('kBinObjData,DataToBinObj(gData));
-
- //array of keys to lookup in benchmark - we look up every item
- DefConst('kBenchmarkKeys, call func()
- begin
- local i,elt;
- foreach i,elt in gData collect elt.slot2;
- end with ()
- );
-
- //
- //Benchmarks
- //
-
-
- // set to nil for final run so test won't affect timings
- // (FrameOfFrames's test is slightly simpler than the rest)
- constant kCheckResult := nil;
-
- DefConst('kArrayOfFramesBenchmarkFn,
- func()
- begin
- local iTicks := Ticks();
- local key;
- foreach key in kBenchmarkKeys do
- begin
- local result := call kBSearchArrayOfFramesFn with (kArrayOfFramesData,key);
- if NOT result then
- Print("*error* - \"" & key & "\" not found");
- if kCheckResult then
- begin
- local resultStr := kArrayOfFramesData[result].slot2;
- if NOT StrEqual(resultStr,key) then
- Print("*error* - kArrayOfFramesBenchmarkFn \"" & resultStr & "\" <> \"" & key & $");
- end;
- end;
- iTicks := Ticks() - iTicks;
- Print("ArrayOfFramesBenchmark:" && iTicks);
- end
- );
-
-
- DefConst('kArrayOfArraysBenchmarkFn,
- func()
- begin
- local iTicks := Ticks();
- local key;
- foreach key in kBenchmarkKeys do
- begin
- local result := call kBSearchArrayOfArraysFn with (kArrayOfArraysData,key);
- if NOT result then
- Print("*error* - \"" & key & "\" not found");
- if kCheckResult then
- begin
- local resultStr := kArrayOfArraysData[result][1];
- if NOT StrEqual(resultStr,key) then
- Print("*error* - kArrayOfArraysBenchmarkFn \"" & resultStr & "\" <> \"" & key & $");
- end;
- end;
- iTicks := Ticks() - iTicks;
- Print("ArrayOfArraysBenchmark:" && iTicks);
- end
- );
-
-
- DefConst('kFrameOfFramesBenchmarkFn,
- func()
- begin
- local iTicks := Ticks();
- local key;
- foreach key in kBenchmarkKeys do
- begin
- local result := kFrameOfFramesData.(Intern(key));
- if NOT result then
- Print("*error* - \"" & key & "\" not found");
- end;
- iTicks := Ticks() - iTicks;
- Print("FrameOfFramesBenchmark:" && iTicks);
- end
- );
-
-
- DefConst('kBinObjBenchmarkFn,
- func()
- begin
- local iTicks := Ticks();
- local key;
- foreach key in kBenchmarkKeys do
- begin
- local result := call kBSearchBinaryObjFn with (kBinObjData,key);
- if NOT result then
- Print("*error* - \"" & key & "\" not found");
- if kCheckResult then
- begin
- local resultStr := ExtractCString(kBinObjData,result + kSlot2Offset);
- if NOT StrEqual(resultStr,key) then
- Print("*error* - kBinObjBenchmarkFn \"" & resultStr & "\" <> \"" & key & $");
- end;
- end;
- iTicks := Ticks() - iTicks;
- Print("BinObjBenchmark:" && iTicks);
- end
- );
-
-
- DefConst('kSoupBenchmarkFn,
- func(soup)
- begin
- local cursor := Query(soup,'{type: index, indexPath: slot2});
- local iTicks := Ticks();
- local key;
- foreach key in kBenchmarkKeys do
- begin
- local result := cursor:GotoKey(key).slot2;
- if kCheckResult then if NOT StrEqual(result,key) then Print("*error* - kSoupBenchmarkFn" && result && "<>" && key);
- end;
- iTicks := Ticks() - iTicks;
- Print("SoupBenchmark:" && iTicks);
- end
- );
-
-
- "Reg the Llama";
-