private static Tuple <string, string> ShortenAndEncode(BufferedEnumerable value, int position, char pointer)
        {
            int start          = value.GetStartIndex(position);
            int end            = value.GetEndIndex(position);
            var printedValue   = new StringBuilder(100);
            var printedPointer = new StringBuilder(100);

            var simpleTypeName = ConvertToSimpleTypeName(value.Sequence.GetType().GetTypeInfo());

            printedValue.AppendFormat("{0} [", simpleTypeName);
            printedPointer.Append(' ', simpleTypeName.Length + 2);

            if (start > 0)
            {
                printedValue.Append("···, ");
                printedPointer.Append("     ");
            }

            for (int idx = start; idx < end; ++idx)
            {
                var item          = value[idx];
                int paddingLength = 1;

                if (idx != start)
                {
                    printedValue.Append(", ");
                    printedPointer.Append("  ");
                }

                if (item is char c && Encodings.TryGetValue(c, out string encoding))
                {
                    printedValue.Append(encoding);
                    paddingLength = encoding.Length;
                }
Example #2
0
        public void PackageExtensionsFind_TwoPackagesInCollectionAndQueryableResultsPutInBufferedEnumerable_OnePackageInBufferedEnumerable()
        {
            List <IPackage> packages = new List <IPackage>();

            // Need to add descriptiosn otherwise we get a null reference when enumerating results
            // in BufferedEnumerable
            var package1 = new FakePackage()
            {
                Id = "Test", Description = "b"
            };
            var package2 = new FakePackage()
            {
                Id = "Another", Description = "a"
            };

            packages.Add(package1);
            packages.Add(package2);

            IQueryable <IPackage> query = packages.AsQueryable();

            IQueryable <IPackage> filteredResults = query.Find("Test");

            var      collection   = new BufferedEnumerable <IPackage>(filteredResults, 10);
            IPackage foundPackage = collection.First();

            Assert.AreEqual("Test", foundPackage.Id);
        }
 public SequenceEqualException(BufferedEnumerable expected, BufferedEnumerable actual, int expectedIndex, int actualIndex)
     : base(expected.Sequence, actual.Sequence)
 {
     actualSequence   = actual;
     expectedSequence = expected;
     ActualIndex      = actualIndex;
     ExpectedIndex    = expectedIndex;
 }
        public void TakingMoreThanBufferSizesReturnsItems()
        {
            // Arrange
            var e = new BufferedEnumerable<int>(Enumerable.Range(0, 10000).AsQueryable(), 5);

            // Act
            var items = e.Take(20).ToList();

            // Assert
            Assert.Equal(20, items.Count);
        }
        public void TakingMoreThanBufferSizesReturnsItems()
        {
            // Arrange
            var e = new BufferedEnumerable <int>(Enumerable.Range(0, 10000).AsQueryable(), 5);

            // Act
            var items = e.Take(20).ToList();

            // Assert
            Assert.Equal(20, items.Count);
        }
        public void ShouldCallCleanup()
        {
            // Arrange
            bool cleanedUp = false;

            var list = BufferedEnumerable.Create("ABC".ToIterator(), () => cleanedUp = true)
                       .ToList();

            // Act
            Assert.AreEqual(3, list.Count);

            SpinWait.SpinUntil(() => cleanedUp, 1000);

            Assert.True(cleanedUp);
        }
        public void BufferedEnumeratorTakingMoreThanBufferSizeQueriesSourceMoreThanOnce()
        {
            // Arrange
            var state = new BufferedEnumerable<int>.QueryState<int>(5);
            var query = Enumerable.Range(0, 10000).AsQueryable();
            var e = new BufferedEnumerable<int>.BufferedEnumerator<int>(state, query, 5);
            e.Reset();

            // Act
            for (int i = 0; i < 6; i++) {
                e.MoveNext();
            }

            // Assert
            Assert.AreEqual(10, state.Cache.Count);
        }
        public void IfNoMoreItemsInSourceSetsIsEmpty()
        {
            // Arrange
            var state = new BufferedEnumerable<int>.QueryState<int>(5);
            var query = Enumerable.Range(0, 5).AsQueryable();
            var e = new BufferedEnumerable<int>.BufferedEnumerator<int>(state, query, 1);
            e.Reset();

            // Act
            for (int i = 0; i < 5; i++) {
                e.MoveNext();
            }

            // Assert
            Assert.IsTrue(e.IsEmpty);
            Assert.AreEqual(5, state.Cache.Count);
        }
        public static IEnumerable <IDictionary <string, object> > ToBufferedEnumerable(this IDbCommand command)
        {
            try
            {
                command.Connection.Open();
            }
            catch (DbException ex)
            {
                throw new AdoAdapterException(ex.Message, ex);
            }
            var reader = command.ExecuteReaderWithExceptionWrap();
            var index  = reader.CreateDictionaryIndex();

            return(BufferedEnumerable.Create(() => reader.Read()
                                                       ? Maybe.Some(reader.ToDictionary(index))
                                                       : Maybe <IDictionary <string, object> > .None,
                                             () => { using (command.Connection) using (command) using (reader) {}}));
        }
        public void BufferedEnumeratorTakingMoreThanBufferSizeQueriesSourceMoreThanOnce()
        {
            // Arrange
            var state = new BufferedEnumerable <int> .QueryState <int>(5);

            var query = Enumerable.Range(0, 10000).AsQueryable();
            var e     = new BufferedEnumerable <int> .BufferedEnumerator <int>(state, query, 5);

            e.Reset();

            // Act
            for (int i = 0; i < 6; i++)
            {
                e.MoveNext();
            }

            // Assert
            Assert.Equal(10, state.Cache.Count);
        }
        public void IfNoMoreItemsInSourceSetsIsEmpty()
        {
            // Arrange
            var state = new BufferedEnumerable <int> .QueryState <int>(5);

            var query = Enumerable.Range(0, 5).AsQueryable();
            var e     = new BufferedEnumerable <int> .BufferedEnumerator <int>(state, query, 1);

            e.Reset();

            // Act
            for (int i = 0; i < 5; i++)
            {
                e.MoveNext();
            }

            // Assert
            Assert.True(e.IsEmpty);
            Assert.Equal(5, state.Cache.Count);
        }
        public static IEnumerable <IDictionary <string, object> > ToBufferedEnumerable(this IDbCommand command, IDbConnection connection, IDictionary <string, int> index)
        {
            try
            {
                if (connection.State == ConnectionState.Closed)
                {
                    connection.Open();
                }
            }
            catch (DbException ex)
            {
                throw new AdoAdapterException(ex.Message, ex);
            }
            var reader = command.ExecuteReaderWithExceptionWrap();

            return(BufferedEnumerable.Create(() => reader.Read()
                                                       ? Maybe.Some(reader.ToDictionary(index))
                                                       : Maybe <IDictionary <string, object> > .None,
                                             () => DisposeCommandAndReader(connection, command, reader)));
        }
		public void PackageExtensionsFind_TwoPackagesInCollectionAndQueryableResultsPutInBufferedEnumerable_OnePackageInBufferedEnumerable()
		{
			List<IPackage> packages = new List<IPackage>();
			
			// Need to add descriptiosn otherwise we get a null reference when enumerating results 
			// in BufferedEnumerable
			var package1 = new FakePackage() {
				Id = "Test", Description = "b"
			};
			var package2 = new FakePackage() {
				Id = "Another", Description = "a"
			};
			packages.Add(package1);
			packages.Add(package2);
			
			IQueryable<IPackage> query = packages.AsQueryable();
			
			IQueryable<IPackage> filteredResults = query.Find("Test");
			
			var collection = new BufferedEnumerable<IPackage>(filteredResults, 10);
			IPackage foundPackage = collection.First();
			
			Assert.AreEqual("Test", foundPackage.Id);
		}