示例#1
0
        public void TryReadRecord_MultipleRecordsInEnumerable_AllRecordsAreRead()
        {
            var recordsRead = 0;
            var records     = new List <object>()
            {
                new object(),
                new object()
            };

            var enumerableReader = new EnumerableReader(records);

            bool couldReadRecord;
            IEnumerable <FieldFailure> failures;

            do
            {
                couldReadRecord = enumerableReader.TryReadRecord(out var record, out failures);

                if (couldReadRecord)
                {
                    Assert.AreEqual(records[recordsRead++], record);
                    Assert.IsNull(failures);
                }
            }while (couldReadRecord || failures?.Count() > 0);

            Assert.AreEqual(records.Count, recordsRead);
        }
示例#2
0
        private static void VisualizeSky(EnumerableReader <Star> stars, int minX, int maxX)
        {
            for (Star star = stars.TakeFirst(), nextStar = null; star != null; star = nextStar)
            {
                var builder = new StringBuilder(new string(Enumerable.Repeat('.', 1 + maxX - minX).ToArray()));
                int y       = star.Position.Y;
                builder[star.Position.X - minX] = '#';

                for (nextStar = stars.TakeFirst(); nextStar != null && nextStar.Position.Y == star.Position.Y; nextStar = stars.TakeFirst())
                {
                    builder[nextStar.Position.X - minX] = '#';
                }

                Console.WriteLine(builder);

                if (nextStar != null)
                {
                    for (int i = star.Position.Y + 1; i < nextStar.Position.Y; i++)
                    {
                        builder = new StringBuilder(new string(Enumerable.Repeat('.', 1 + maxX - minX).ToArray()));
                        Console.WriteLine(builder);
                    }
                }
            }
        }
示例#3
0
        public void TryReadRecord_OneRecordThatFailsToMap_RecordIsNotReadAndFailureIsReturned()
        {
            var records = new List <object>()
            {
                new object()
            };
            var failures = new List <FieldFailure>()
            {
                new FieldFailure()
            };

            var recordMapper = MockRepository.GenerateMock <IRecordMapper>();

            recordMapper.Stub(x => x.TryMap(
                                  Arg <object> .Is.Equal(records[0]),
                                  out Arg <object> .Out(null).Dummy,
                                  out Arg <IEnumerable <FieldFailure> > .Out(failures).Dummy))
            .Return(false);

            var enumerableReader = new EnumerableReader(records, recordMapper);

            var couldReadRecord = enumerableReader.TryReadRecord(out var returnedRecord, out var returnedFailures);

            Assert.IsFalse(couldReadRecord);
            Assert.IsNull(returnedRecord);
            Assert.AreEqual(failures, returnedFailures);
        }
示例#4
0
        public void TryReadRecord_EmptyEnumerable_ZeroRecordsAreRead()
        {
            var records = new List <object>()
            {
            };

            var enumerableReader = new EnumerableReader(records);

            var couldReadRecord = enumerableReader.TryReadRecord(out var record, out var failures);

            Assert.IsFalse(couldReadRecord);
        }
示例#5
0
        private static LicenseNode GetNode(EnumerableReader <int> input)
        {
            var numChildren = input.TakeFirst();
            var numMetadata = input.TakeFirst();

            var children = new LicenseNode[numChildren];

            for (int i = 0; i < numChildren; i++)
            {
                children[i] = GetNode(input);
            }

            return(new LicenseNode(children, input.TakeN(numMetadata)));
        }
示例#6
0
        static void Main(string[] args)
        {
            var licenseInput  = GetLicenseInput();
            var licenseReader = new EnumerableReader <int>(licenseInput);

            var rootNode = GetNode(licenseReader);

            Console.WriteLine($"Part 1: Sum of metadata: {rootNode.MetadataSum}");
            Console.WriteLine("");
            Console.WriteLine($"Part 2: Value of root node: {rootNode.Value}");

            Console.WriteLine("");
            Console.WriteLine("Done");
            Console.ReadKey();
        }
示例#7
0
        public void TryReadRecord_OneRecordInEnumerableWithRecordMapper_OneRecordIsMappedAndRead()
        {
            var recordsRead = 0;
            var records     = new List <object>()
            {
                new object()
            };
            var mappedRecords = new List <object>()
            {
                new object()
            };

            var recordMapper = MockRepository.GenerateMock <IRecordMapper>();

            recordMapper.Expect(x => x.TryMap(
                                    Arg <object> .Is.Equal(records[0]),
                                    out Arg <object> .Out(mappedRecords[0]).Dummy,
                                    out Arg <IEnumerable <FieldFailure> > .Out(null).Dummy))
            .Return(true)
            .Repeat.Once();

            var enumerableReader = new EnumerableReader(records, recordMapper);

            bool couldReadRecord;
            IEnumerable <FieldFailure> failures;

            do
            {
                couldReadRecord = enumerableReader.TryReadRecord(out var record, out failures);

                if (couldReadRecord)
                {
                    Assert.AreEqual(mappedRecords[recordsRead++], record);
                    Assert.IsNull(failures);
                }
            }while (couldReadRecord || failures?.Count() > 0);

            recordMapper.VerifyAllExpectations();

            Assert.AreEqual(records.Count, recordsRead);
        }