test-duffs-device.nut 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. local tbl = {len2 = function() {return "dad";}, }
  2. print(table_size(tbl), table_len(tbl), tbl.len2());
  3. local s = "dad";
  4. switch(s){
  5. case "dad": print(1, s); break;
  6. case "tais": print(2, s); break;
  7. default:
  8. print(3, s);
  9. }
  10. local function process(i){
  11. return i+i;
  12. }
  13. local count = 10000;
  14. local values = array(1000);
  15. for(var i=0, len=values.len(); i < len; ++i) values[i] = i;
  16. local start = os.clock();
  17. for(var k=0; k < count; ++k){
  18. var iterations = math.floor(values.len() / 8);
  19. var startAt = values.len() % 8;
  20. var i = 0;
  21. do {
  22. switch(startAt){
  23. case 0: process(values[i++]);
  24. case 7: process(values[i++]);
  25. case 6: process(values[i++]);
  26. case 5: process(values[i++]);
  27. case 4: process(values[i++]);
  28. case 3: process(values[i++]);
  29. case 2: process(values[i++]);
  30. case 1: process(values[i++]);
  31. }
  32. startAt = 0;
  33. } while (--iterations > 0);
  34. }
  35. print("Duff's Device with switch took:", os.clock()-start);
  36. start = os.clock();
  37. for(var k=0; k < count; ++k){
  38. var iterations = math.floor(values.len() / 8);
  39. var leftover = values.len() % 8;
  40. var i = 0;
  41. if (leftover > 0){
  42. do {
  43. process(values[i++]);
  44. } while (--leftover > 0);
  45. }
  46. do {
  47. process(values[i++]);
  48. process(values[i++]);
  49. process(values[i++]);
  50. process(values[i++]);
  51. process(values[i++]);
  52. process(values[i++]);
  53. process(values[i++]);
  54. process(values[i++]);
  55. } while (--iterations > 0);
  56. }
  57. print("Duff's Device without switch took:", os.clock()-start);
  58. start = os.clock();
  59. for(var k=0; k < count; ++k){
  60. for(var i=0, len=values.len(); i < len; ++i) process(values[i]);
  61. }
  62. print("for loop took:", os.clock()-start);