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