예제 #1
0
        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}'");
                }
            }
        }
예제 #2
0
        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)));
        }