| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | // Licensed to the .NET Foundation under one or more agreements.// The .NET Foundation licenses this file to you under the MIT License.// See the LICENSE file in the project root for more information. using System;using System.Linq;using System.Reactive.Linq;using System.Threading;using Microsoft.Reactive.Testing;using ReactiveTests.Dummies;using Microsoft.VisualStudio.TestTools.UnitTesting;using Assert = Xunit.Assert;namespace ReactiveTests.Tests{    [TestClass]    public class IntervalTest : ReactiveTest    {        [TestMethod]        public void Interval_TimeSpan_ArgumentChecking()        {            ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Interval(TimeSpan.Zero, null));            ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Interval(TimeSpan.Zero, DummyScheduler.Instance).Subscribe(null));            ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.Interval(TimeSpan.FromSeconds(-1)));            ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.Interval(TimeSpan.FromSeconds(-1), DummyScheduler.Instance));        }        [TestMethod]        public void Interval_TimeSpan_Basic()        {            var scheduler = new TestScheduler();            var res = scheduler.Start(() =>                Observable.Interval(TimeSpan.FromTicks(100), scheduler)            );            res.Messages.AssertEqual(                OnNext(300, 0L),                OnNext(400, 1L),                OnNext(500, 2L),                OnNext(600, 3L),                OnNext(700, 4L),                OnNext(800, 5L),                OnNext(900, 6L)            );        }        [TestMethod]        public void Interval_TimeSpan_Zero()        {            var scheduler = new TestScheduler();            var res = scheduler.Start(() =>                Observable.Interval(TimeSpan.FromTicks(0), scheduler),                210            );            res.Messages.AssertEqual(                OnNext(201, 0L),                OnNext(202, 1L),                OnNext(203, 2L),                OnNext(204, 3L),                OnNext(205, 4L),                OnNext(206, 5L),                OnNext(207, 6L),                OnNext(208, 7L),                OnNext(209, 8L)            );        }        [TestMethod]        public void Interval_TimeSpan_Zero_DefaultScheduler()        {            var scheduler = new TestScheduler();            var observer = scheduler.CreateObserver<long>();            var completed = new ManualResetEvent(false);            Observable.Interval(TimeSpan.Zero).TakeWhile(i => i < 10).Subscribe(observer.OnNext, () => completed.Set());            completed.WaitOne();            Assert.Equal(10, observer.Messages.Count);        }        [TestMethod]        public void Interval_TimeSpan_Disposed()        {            var scheduler = new TestScheduler();            var res = scheduler.Start(                () => Observable.Interval(TimeSpan.FromTicks(1000), scheduler)            );            res.Messages.AssertEqual(            );        }        [TestMethod]        public void Interval_TimeSpan_ObserverThrows()        {            var scheduler = new TestScheduler();            var xs = Observable.Interval(TimeSpan.FromTicks(1), scheduler);            xs.Subscribe(x => { throw new InvalidOperationException(); });            ReactiveAssert.Throws<InvalidOperationException>(() => scheduler.Start());        }        [TestMethod]        public void Interval_TimeSpan_DefaultScheduler()        {            Assert.True(Observable.Interval(TimeSpan.FromMilliseconds(1)).ToEnumerable().Take(3).SequenceEqual([0L, 1L, 2L]));        }    }}
 |