예제 #1
0
        public void AggresiveValues()
        {
            var mdb = new MockDatabase();

            var enumerator = mdb.ValuesAggressive().GetEnumerator();

            for (var i = 0; i < mdb.Data.Count; i++)
            {
                enumerator.MoveNext().Should().BeTrue();

                mdb.EnsureNoValuesLoadedBeyond(i);
            }

            mdb.EnsureAllValuesLoaded();
        }
예제 #2
0
        public void Keys()
        {
            var mdb = new MockDatabase();

            mdb
            .Keys()
            .Should()
            .BeEquivalentTo
            (
                new[]
            {
                "a", "b", "c", "d",
                "a", "b", "c", "d",
                "a", "b"
            },
                "Returns all keys correctly"
            );

            mdb.EnsureNoValuesLoaded();
        }
예제 #3
0
        public void Values()
        {
            var mdb = new MockDatabase();

            mdb
            .Values()
            .Cast <LazyItem <int> >()
            .Select(x => x.Value)
            .Should()
            .BeEquivalentTo
            (
                new[]
            {
                0, 1, 2, 3,
                4, 5, 6, 7,
                8, 9
            },
                "Returns all values correctly"
            );

            mdb.EnsureNoValuesLoaded();
        }
예제 #4
0
        public async Task MultipleThreadsForeachOver()
        {
            var mockdb = new MockDatabase();

            var db = mockdb.WithThreadLock();

            var tasks = new List <Task>();

            for (var i = 0; i < 10_000; i++)
            {
                tasks.Add(Task.Run(action: () => Parallel.ForEach(db, j => j.Value.Load())));
            }

            await Task.WhenAll(tasks).ConfigureAwait(false);

            // 10,000 threads, 10 items each with 1 load
            // 10,000 * (10 * (1 + 1)) = 10,000 * 20 = 200,000

            mockdb.Counter
            .Should()
            .Be(200_000);
        }
예제 #5
0
        public void EnumerateEggressively()
        {
            var mdb = new MockDatabase();

            var enumerator = mdb.EnumerateAggressively(4).GetEnumerator();

            mdb.EnsureNoValuesLoaded();

            for (var i = 1; i <= 3; i++)
            {
                var point = (i * 4) - 1;

                enumerator.MoveNext();
                mdb.EnsureNoValuesLoadedBeyond(point);

                for (var j = 0; j < 4 - 1; j++)
                {
                    enumerator.MoveNext();
                }
            }

            mdb.EnsureAllValuesLoaded();
        }
예제 #6
0
 public BufferedDatabaseTests()
 {
     _mockDb = new MockDatabase();
     _db     = new BufferedDatabase <int, int>(_mockDb, BufferSize);
 }
예제 #7
0
 public LazyLoader(MockDatabase db, int load)
 {
     _db   = db;
     _load = load;
 }