fork(1) download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. public class Test
  6. {
  7. const int TestCount = 250;
  8. const int ArraySize = 1000000;
  9.  
  10. static readonly byte[] Lut = Enumerable.Range(0, 256).Select(F).ToArray();
  11.  
  12. static byte F(int i)
  13. {
  14. return (byte)((i & 64) / 8 + (i & 16) / 4 + (i & 4) / 2 + (i & 1));
  15. }
  16.  
  17. static byte[] Input;
  18. static byte[] Output;
  19.  
  20. public static void Main()
  21. {
  22. Input = new byte[ArraySize];
  23. Output = new byte[ArraySize];
  24. var rnd = new Random();
  25. rnd.NextBytes(Input);
  26.  
  27. Console.WriteLine("LUT");
  28. var sw1 = System.Diagnostics.Stopwatch.StartNew();
  29. TestLut(Input, Output);
  30. Console.WriteLine(sw1.Elapsed);
  31.  
  32. Console.WriteLine("SWITCH");
  33. var sw2 = System.Diagnostics.Stopwatch.StartNew();
  34. TestLut(Input, Output);
  35. Console.WriteLine(sw2.Elapsed);
  36. }
  37.  
  38. static void TestLut(byte[] source, byte[] dest)
  39. {
  40. for (int t = 0; t < TestCount; t++)
  41. for (int i = 0; i < source.Length; i++)
  42. {
  43. dest[i] = Lut[source[i]];
  44. }
  45. }
  46.  
  47. static void TestSwitch(byte[] source, byte[] dest)
  48. {
  49. byte result = 0;
  50. for (int t = 0; t < TestCount; t++)
  51. for (int i = 0; i < source.Length; i++)
  52. {
  53. switch (i)
  54. {
  55. case 0: result = 0; break;
  56. case 1: result = 1; break;
  57. case 2: result = 0; break;
  58. case 3: result = 1; break;
  59. case 4: result = 2; break;
  60. case 5: result = 3; break;
  61. case 6: result = 2; break;
  62. case 7: result = 3; break;
  63. case 8: result = 0; break;
  64. case 9: result = 1; break;
  65. case 10: result = 0; break;
  66. case 11: result = 1; break;
  67. case 12: result = 2; break;
  68. case 13: result = 3; break;
  69. case 14: result = 2; break;
  70. case 15: result = 3; break;
  71. case 16: result = 4; break;
  72. case 17: result = 5; break;
  73. case 18: result = 4; break;
  74. case 19: result = 5; break;
  75. case 20: result = 6; break;
  76. case 21: result = 7; break;
  77. case 22: result = 6; break;
  78. case 23: result = 7; break;
  79. case 24: result = 4; break;
  80. case 25: result = 5; break;
  81. case 26: result = 4; break;
  82. case 27: result = 5; break;
  83. case 28: result = 6; break;
  84. case 29: result = 7; break;
  85. case 30: result = 6; break;
  86. case 31: result = 7; break;
  87. case 32: result = 0; break;
  88. case 33: result = 1; break;
  89. case 34: result = 0; break;
  90. case 35: result = 1; break;
  91. case 36: result = 2; break;
  92. case 37: result = 3; break;
  93. case 38: result = 2; break;
  94. case 39: result = 3; break;
  95. case 40: result = 0; break;
  96. case 41: result = 1; break;
  97. case 42: result = 0; break;
  98. case 43: result = 1; break;
  99. case 44: result = 2; break;
  100. case 45: result = 3; break;
  101. case 46: result = 2; break;
  102. case 47: result = 3; break;
  103. case 48: result = 4; break;
  104. case 49: result = 5; break;
  105. case 50: result = 4; break;
  106. case 51: result = 5; break;
  107. case 52: result = 6; break;
  108. case 53: result = 7; break;
  109. case 54: result = 6; break;
  110. case 55: result = 7; break;
  111. case 56: result = 4; break;
  112. case 57: result = 5; break;
  113. case 58: result = 4; break;
  114. case 59: result = 5; break;
  115. case 60: result = 6; break;
  116. case 61: result = 7; break;
  117. case 62: result = 6; break;
  118. case 63: result = 7; break;
  119. case 64: result = 8; break;
  120. case 65: result = 9; break;
  121. case 66: result = 8; break;
  122. case 67: result = 9; break;
  123. case 68: result = 10; break;
  124. case 69: result = 11; break;
  125. case 70: result = 10; break;
  126. case 71: result = 11; break;
  127. case 72: result = 8; break;
  128. case 73: result = 9; break;
  129. case 74: result = 8; break;
  130. case 75: result = 9; break;
  131. case 76: result = 10; break;
  132. case 77: result = 11; break;
  133. case 78: result = 10; break;
  134. case 79: result = 11; break;
  135. case 80: result = 12; break;
  136. case 81: result = 13; break;
  137. case 82: result = 12; break;
  138. case 83: result = 13; break;
  139. case 84: result = 14; break;
  140. case 85: result = 15; break;
  141. case 86: result = 14; break;
  142. case 87: result = 15; break;
  143. case 88: result = 12; break;
  144. case 89: result = 13; break;
  145. case 90: result = 12; break;
  146. case 91: result = 13; break;
  147. case 92: result = 14; break;
  148. case 93: result = 15; break;
  149. case 94: result = 14; break;
  150. case 95: result = 15; break;
  151. case 96: result = 8; break;
  152. case 97: result = 9; break;
  153. case 98: result = 8; break;
  154. case 99: result = 9; break;
  155. case 100: result = 10; break;
  156. case 101: result = 11; break;
  157. case 102: result = 10; break;
  158. case 103: result = 11; break;
  159. case 104: result = 8; break;
  160. case 105: result = 9; break;
  161. case 106: result = 8; break;
  162. case 107: result = 9; break;
  163. case 108: result = 10; break;
  164. case 109: result = 11; break;
  165. case 110: result = 10; break;
  166. case 111: result = 11; break;
  167. case 112: result = 12; break;
  168. case 113: result = 13; break;
  169. case 114: result = 12; break;
  170. case 115: result = 13; break;
  171. case 116: result = 14; break;
  172. case 117: result = 15; break;
  173. case 118: result = 14; break;
  174. case 119: result = 15; break;
  175. case 120: result = 12; break;
  176. case 121: result = 13; break;
  177. case 122: result = 12; break;
  178. case 123: result = 13; break;
  179. case 124: result = 14; break;
  180. case 125: result = 15; break;
  181. case 126: result = 14; break;
  182. case 127: result = 15; break;
  183. case 128: result = 0; break;
  184. case 129: result = 1; break;
  185. case 130: result = 0; break;
  186. case 131: result = 1; break;
  187. case 132: result = 2; break;
  188. case 133: result = 3; break;
  189. case 134: result = 2; break;
  190. case 135: result = 3; break;
  191. case 136: result = 0; break;
  192. case 137: result = 1; break;
  193. case 138: result = 0; break;
  194. case 139: result = 1; break;
  195. case 140: result = 2; break;
  196. case 141: result = 3; break;
  197. case 142: result = 2; break;
  198. case 143: result = 3; break;
  199. case 144: result = 4; break;
  200. case 145: result = 5; break;
  201. case 146: result = 4; break;
  202. case 147: result = 5; break;
  203. case 148: result = 6; break;
  204. case 149: result = 7; break;
  205. case 150: result = 6; break;
  206. case 151: result = 7; break;
  207. case 152: result = 4; break;
  208. case 153: result = 5; break;
  209. case 154: result = 4; break;
  210. case 155: result = 5; break;
  211. case 156: result = 6; break;
  212. case 157: result = 7; break;
  213. case 158: result = 6; break;
  214. case 159: result = 7; break;
  215. case 160: result = 0; break;
  216. case 161: result = 1; break;
  217. case 162: result = 0; break;
  218. case 163: result = 1; break;
  219. case 164: result = 2; break;
  220. case 165: result = 3; break;
  221. case 166: result = 2; break;
  222. case 167: result = 3; break;
  223. case 168: result = 0; break;
  224. case 169: result = 1; break;
  225. case 170: result = 0; break;
  226. case 171: result = 1; break;
  227. case 172: result = 2; break;
  228. case 173: result = 3; break;
  229. case 174: result = 2; break;
  230. case 175: result = 3; break;
  231. case 176: result = 4; break;
  232. case 177: result = 5; break;
  233. case 178: result = 4; break;
  234. case 179: result = 5; break;
  235. case 180: result = 6; break;
  236. case 181: result = 7; break;
  237. case 182: result = 6; break;
  238. case 183: result = 7; break;
  239. case 184: result = 4; break;
  240. case 185: result = 5; break;
  241. case 186: result = 4; break;
  242. case 187: result = 5; break;
  243. case 188: result = 6; break;
  244. case 189: result = 7; break;
  245. case 190: result = 6; break;
  246. case 191: result = 7; break;
  247. case 192: result = 8; break;
  248. case 193: result = 9; break;
  249. case 194: result = 8; break;
  250. case 195: result = 9; break;
  251. case 196: result = 10; break;
  252. case 197: result = 11; break;
  253. case 198: result = 10; break;
  254. case 199: result = 11; break;
  255. case 200: result = 8; break;
  256. case 201: result = 9; break;
  257. case 202: result = 8; break;
  258. case 203: result = 9; break;
  259. case 204: result = 10; break;
  260. case 205: result = 11; break;
  261. case 206: result = 10; break;
  262. case 207: result = 11; break;
  263. case 208: result = 12; break;
  264. case 209: result = 13; break;
  265. case 210: result = 12; break;
  266. case 211: result = 13; break;
  267. case 212: result = 14; break;
  268. case 213: result = 15; break;
  269. case 214: result = 14; break;
  270. case 215: result = 15; break;
  271. case 216: result = 12; break;
  272. case 217: result = 13; break;
  273. case 218: result = 12; break;
  274. case 219: result = 13; break;
  275. case 220: result = 14; break;
  276. case 221: result = 15; break;
  277. case 222: result = 14; break;
  278. case 223: result = 15; break;
  279. case 224: result = 8; break;
  280. case 225: result = 9; break;
  281. case 226: result = 8; break;
  282. case 227: result = 9; break;
  283. case 228: result = 10; break;
  284. case 229: result = 11; break;
  285. case 230: result = 10; break;
  286. case 231: result = 11; break;
  287. case 232: result = 8; break;
  288. case 233: result = 9; break;
  289. case 234: result = 8; break;
  290. case 235: result = 9; break;
  291. case 236: result = 10; break;
  292. case 237: result = 11; break;
  293. case 238: result = 10; break;
  294. case 239: result = 11; break;
  295. case 240: result = 12; break;
  296. case 241: result = 13; break;
  297. case 242: result = 12; break;
  298. case 243: result = 13; break;
  299. case 244: result = 14; break;
  300. case 245: result = 15; break;
  301. case 246: result = 14; break;
  302. case 247: result = 15; break;
  303. case 248: result = 12; break;
  304. case 249: result = 13; break;
  305. case 250: result = 12; break;
  306. case 251: result = 13; break;
  307. case 252: result = 14; break;
  308. case 253: result = 15; break;
  309. case 254: result = 14; break;
  310. case 255: result = 15; break;
  311. }
  312. dest[i] = result;
  313. }
  314. }
  315.  
  316. }
Success #stdin #stdout 2.47s 26264KB
stdin
Standard input is empty
stdout
LUT
00:00:01.2087834
SWITCH
00:00:01.2083818