public void Iterators_ComputeScalar_ComputesValues()
        {
            var rows = new object[]
            {
                4, 6, 8
            };

            var expected = new object[, ]
            {
                { 4, 12 },
                { 6, 18 },
                { 8, 24 }
            };

            using (var input = new MockedIterator(rows))
            {
                var values = new IteratorFunction[]
                {
                    () => (int)input.RowBuffer[0] * 3
                };

                using (var iterator = new ComputeScalarIterator(input, values))
                {
                    AssertProduces(iterator, expected);
                }
            }
        }
        public void Iterators_ComputeScalar_ReturnsEmpty_IfInputIsEmpty()
        {
            var rows   = new object[0];
            var values = new IteratorFunction[]
            {
                () => 1
            };

            using (var input = new MockedIterator(rows))
                using (var iterator = new ComputeScalarIterator(input, values))
                {
                    AssertEmpty(iterator);
                }
        }
        public void Iterators_ComputeScalar_ForwardsProperly()
        {
            var values = Enumerable.Empty <IteratorFunction>();

            var rows     = new object[] { 1, 2 };
            var expected = rows;

            using (var input = new MockedIterator(rows))
            {
                using (var iterator = new ComputeScalarIterator(input, values))
                {
                    for (var i = 0; i < 2; i++)
                    {
                        AssertProduces(iterator, expected);
                    }
                }

                Assert.Equal(2, input.TotalOpenCount);
                Assert.Equal(4, input.TotalReadCount);
                Assert.Equal(1, input.DisposalCount);
            }
        }