home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Sample Code / Newton Sample Code 1.2 / Data Storage (Soups) / LostInSpaceCode / TimeWars / Project Data next >
Encoding:
Text File  |  1994-03-19  |  4.1 KB  |  157 lines  |  [TEXT/R*ch]

  1. /*
  2. ** Copyright: © Michael S. Engber, 1994. All Rights Reserved.
  3. **
  4. ** Project Data for TimeWars
  5. **
  6. ** This project illustrates the differences between different
  7. ** ways of storing data in your package.
  8. **
  9. **                        benchmark
  10. **     Data Structure     time (ticks)
  11. **  --------------------  ------------
  12. **  array of frames              755
  13. **  array of arrays              725
  14. **  frame of frames           (60)97
  15. **  binary object               1001
  16. **  soup                         420
  17. **  store part                   343
  18. **
  19. */
  20.  
  21. constant kAppString := "TimeWars:Avarice";
  22.  
  23.  
  24. Load(Home & ":Data.f");
  25. Load(Home & ":DataUtils.f");
  26. Load(Home & ":SearchUtils.f");
  27.  
  28. constant kDataStructure := 'ArrayOfFramesCommonMap;
  29.  
  30. //data sets
  31. DefConst('kArrayOfFramesData,CloneWithCommonMap(gData));
  32. DefConst('kArrayOfArraysData,DataToArrays(gData));
  33. DefConst('kFrameOfFramesData,DataToFrame(gData));
  34. DefConst('kBinObjData,DataToBinObj(gData));
  35.  
  36. //array of keys to lookup in benchmark - we look up every item
  37. DefConst('kBenchmarkKeys, call func()
  38.   begin
  39.     local i,elt;
  40.     foreach i,elt in gData collect elt.slot2;
  41.   end with ()
  42. );
  43.  
  44. //
  45. //Benchmarks
  46. //
  47.  
  48.  
  49. // set to nil for final run so test won't affect timings
  50. // (FrameOfFrames's test is slightly simpler than the rest)
  51. constant kCheckResult := nil;
  52.  
  53. DefConst('kArrayOfFramesBenchmarkFn,
  54.   func()
  55.   begin
  56.     local iTicks := Ticks();
  57.       local key;
  58.       foreach key in kBenchmarkKeys do
  59.         begin
  60.         local result := call kBSearchArrayOfFramesFn with (kArrayOfFramesData,key);
  61.         if NOT result then
  62.           Print("*error* - \"" & key & "\" not found");
  63.         if kCheckResult then
  64.           begin
  65.             local resultStr := kArrayOfFramesData[result].slot2;
  66.             if NOT StrEqual(resultStr,key) then
  67.               Print("*error* - kArrayOfFramesBenchmarkFn \"" & resultStr & "\" <> \"" & key & $");
  68.           end;
  69.       end;
  70.     iTicks := Ticks() - iTicks;
  71.     Print("ArrayOfFramesBenchmark:" && iTicks);
  72.   end
  73. );
  74.  
  75.  
  76. DefConst('kArrayOfArraysBenchmarkFn,
  77.   func()
  78.   begin
  79.     local iTicks := Ticks();
  80.       local key;
  81.       foreach key in kBenchmarkKeys do
  82.         begin
  83.         local result := call kBSearchArrayOfArraysFn with (kArrayOfArraysData,key);
  84.         if NOT result then
  85.           Print("*error* - \"" & key & "\" not found");
  86.         if kCheckResult then
  87.           begin
  88.             local resultStr := kArrayOfArraysData[result][1];
  89.             if NOT StrEqual(resultStr,key) then
  90.               Print("*error* - kArrayOfArraysBenchmarkFn \"" & resultStr & "\" <> \"" & key & $");
  91.           end;
  92.       end;
  93.     iTicks := Ticks() - iTicks;
  94.     Print("ArrayOfArraysBenchmark:" && iTicks);
  95.   end
  96. );
  97.  
  98.  
  99. DefConst('kFrameOfFramesBenchmarkFn,
  100.   func()
  101.   begin
  102.     local iTicks := Ticks();
  103.       local key;
  104.       foreach key in kBenchmarkKeys do
  105.         begin
  106.         local result := kFrameOfFramesData.(Intern(key));
  107.         if NOT result then
  108.           Print("*error* - \"" & key & "\" not found");
  109.       end;
  110.     iTicks := Ticks() - iTicks;
  111.     Print("FrameOfFramesBenchmark:" && iTicks);
  112.   end
  113. );
  114.  
  115.  
  116. DefConst('kBinObjBenchmarkFn,
  117.   func()
  118.   begin
  119.     local iTicks := Ticks();
  120.       local key;
  121.       foreach key in kBenchmarkKeys do
  122.         begin
  123.         local result := call kBSearchBinaryObjFn with (kBinObjData,key);
  124.         if NOT result then
  125.           Print("*error* - \"" & key & "\" not found");
  126.         if kCheckResult then
  127.           begin
  128.             local resultStr := ExtractCString(kBinObjData,result + kSlot2Offset);
  129.             if NOT StrEqual(resultStr,key) then
  130.               Print("*error* - kBinObjBenchmarkFn \"" & resultStr & "\" <> \"" & key & $");
  131.           end;
  132.       end;
  133.     iTicks := Ticks() - iTicks;
  134.     Print("BinObjBenchmark:" && iTicks);
  135.   end
  136. );
  137.  
  138.  
  139. DefConst('kSoupBenchmarkFn,
  140.   func(soup)
  141.   begin
  142.     local cursor := Query(soup,'{type: index, indexPath: slot2});
  143.     local iTicks := Ticks();
  144.       local key;
  145.       foreach key in kBenchmarkKeys do
  146.         begin
  147.         local result := cursor:GotoKey(key).slot2;
  148.         if kCheckResult then if NOT StrEqual(result,key) then Print("*error* - kSoupBenchmarkFn" && result && "<>" && key);
  149.       end;
  150.     iTicks := Ticks() - iTicks;
  151.     Print("SoupBenchmark:" && iTicks);
  152.   end
  153. );
  154.  
  155.  
  156. "Reg the Llama";
  157.