public void RunV2(IEnumerable <string> program) { foreach (var instruction in program) { var(command, argument, index) = ParseInstruction(instruction); switch (command) { case "mask": SetMask(argument); break; case "mem": var indexParam = int.Parse(index); var argumentParam = int.Parse(argument); var targets = mask.GenerateAddresses(indexParam); foreach (var target in targets) { SetV2Memory(target, argumentParam); } break; default: throw new ArgumentException($"Unrecognized program instruction: [{instruction}'"); } } }
public void It_generates_addresses_correctly() { Mask mask; IEnumerable <long> addresses; mask = new Mask("000000000000000000000000000000X1001X"); addresses = mask.GenerateAddresses(42); Assert.IsTrue(new long[] { 26, 27, 58, 59 }.All(a => addresses.Any(ad => a == ad))); mask = new Mask("00000000000000000000000000000000X0XX"); addresses = mask.GenerateAddresses(26); Assert.IsTrue(new long[] { 16, 17, 18, 19, 24, 25, 26, 27 }.All(a => addresses.Any(ad => a == ad))); }