예제 #1
0
        public void YielderExtensionOfType()
        {
            bool v = true;
            int  x = 0;
            // ReSharper disable once AssignmentInConditionalExpression
            var yielder = Yielder.Repeat(() => ((v = !v)) ? (Base) new A {
                Num = x++
            } : new B()
            {
                Str = $"{x++}"
            });

            var aYielder = yielder.OfType <Base, A>();

            Assert.Equal(1, aYielder.Next().Num);
            Assert.Equal(3, aYielder.Next().Num);
            Assert.Equal(5, aYielder.Next().Num);
            Assert.Equal(7, aYielder.Next().Num);

            var bYielder = yielder.OfType <Base, B>();

            Assert.Equal("8", bYielder.Next().Str);
            Assert.Equal("10", bYielder.Next().Str);
            Assert.Equal("12", bYielder.Next().Str);
            Assert.Equal("14", bYielder.Next().Str);
        }
예제 #2
0
        public void YielderExtensionFilter()
        {
            int x        = 1;
            var yielder  = Yielder.Repeat(() => x += 2);
            var filtered = yielder.Filter(v => v % 3 == 0);

            Assert.Equal(3, filtered.Next());
            Assert.Equal(9, filtered.Next());
            Assert.Equal(15, filtered.Next());
            Assert.Equal(21, filtered.Next());
        }
        public void FiniteYielderExtensionFilter()
        {
            int x        = 1;
            var yielder  = Yielder.Repeat(() => x += 2).Take(4);
            var filtered = yielder.Filter(v => v % 3 == 0);

            Assert.Equal(3, filtered.Next());
            Assert.True(filtered.HasNext());
            Assert.Equal(9, filtered.Next());
            Assert.False(filtered.HasNext());
            Assert.False(filtered.HasNext());
        }
예제 #4
0
        public static void EncodeDecodeTest()
        {
            var str     = Yielder.Repeat(() => (char)DefaultRNG.I32.Next(32, 0xd800)).Take(1048576).ToList().Join();
            var encoded = new UTF8Encoding(false).GetBytes(str);

            Assert.Equal(encoded, str.Encode());
            Assert.Equal(encoded, str.Encode(new UTF8Encoding(false)));
            Assert.Equal(encoded, str.Encode("utf-8"));

            Assert.Equal(str, encoded.Decode());
            Assert.Equal(str, encoded.Decode(Encoding.UTF8));
            Assert.Equal(str, encoded.Decode("utf-8"));
        }
        public void FiniteYielderExtensionOfType()
        {
            bool v = true;
            int  x = 0;
            // ReSharper disable once AssignmentInConditionalExpression
            var yielder = Yielder.Repeat(() => ((v = !v)) ? (Base) new A {
                Num = x++
            } : new B()
            {
                Str = $"{x++}"
            }).Take(8);

            var aYielder = yielder.OfType <Base, A>();

            Assert.Equal(1, aYielder.Next().Num);
            Assert.Equal(3, aYielder.Next().Num);
            Assert.Equal(5, aYielder.Next().Num);
            Assert.True(aYielder.HasNext());
            Assert.Equal(7, aYielder.Next().Num);
            Assert.False(aYielder.HasNext());
            Assert.False(aYielder.HasNext());
        }
예제 #6
0
        public void YielderBase()
        {
            var yielder = Yielder.Const(7);

            Assert.Equal(7, yielder.Next());
            Assert.Equal(7, yielder.Next());
            Assert.Equal(7, yielder.Next());
            Assert.Equal(7, yielder.Next());

            int x = 1;

            yielder = Yielder.Repeat(() => x *= 2);
            Assert.Equal(2, yielder.Next());
            Assert.Equal(4, yielder.Next());
            Assert.Equal(8, yielder.Next());
            Assert.Equal(16, yielder.Next());

            yielder = Yielder.Iterate(v => v * 3, 1);
            Assert.Equal(3, yielder.Next());
            Assert.Equal(9, yielder.Next());
            Assert.Equal(27, yielder.Next());
            Assert.Equal(81, yielder.Next());
        }