public async Task Moving_range_evicts_cached_epochs() { HintBasedCache hintBasedCache = new HintBasedCache(e => new NullDataSet(), LimboLogs.Instance); hintBasedCache.Hint(_guidA, 0, 209999); hintBasedCache.Hint(_guidA, 30000, 239999); await WaitFor(() => hintBasedCache.CachedEpochsCount == 7); Assert.Null(hintBasedCache.Get(0)); for (uint i = 1; i < 8; i++) { Assert.NotNull(hintBasedCache.Get(i), i.ToString()); } }
public async Task Different_users_can_use_disconnected_epochs() { HintBasedCache hintBasedCache = new HintBasedCache(e => new NullDataSet(), LimboLogs.Instance); hintBasedCache.Hint(_guidA, 0, 29999); hintBasedCache.Hint(_guidB, 120000, 149999); await WaitFor(() => hintBasedCache.CachedEpochsCount == 2); Assert.NotNull(hintBasedCache.Get(0)); Assert.Null(hintBasedCache.Get(1)); Assert.Null(hintBasedCache.Get(2)); Assert.Null(hintBasedCache.Get(3)); Assert.NotNull(hintBasedCache.Get(4)); }
public async Task Many_threads() { int range = 10000000; HintBasedCache hintBasedCache = new HintBasedCache(e => new NullDataSet(), LimboLogs.Instance); void KeepHinting(Guid guid, int start) { for (int i = start; i <= range; i++) { hintBasedCache.Hint(guid, i, i + 120000); } }; Task a = new Task(() => KeepHinting(_guidA, 100000)); Task b = new Task(() => KeepHinting(_guidB, 0)); Task c = new Task(() => KeepHinting(_guidC, 500000)); a.Start(); b.Start(); c.Start(); await Task.WhenAll(a, b, c); Assert.AreEqual(5, hintBasedCache.CachedEpochsCount); for (uint i = (uint)(range / Ethash.EpochLength); i < (uint)((range + 120000) / Ethash.EpochLength); i++) { Assert.NotNull(hintBasedCache.Get(i)); } }
public void Sync_hint_and_get() { HintBasedCache hintBasedCache = new HintBasedCache(e => new NullDataSet(), LimboLogs.Instance); hintBasedCache.Hint(_guidA, 200000, 200000); Assert.NotNull(hintBasedCache.Get((uint)(200000 / Ethash.EpochLength))); }
public void Without_hint_return_null() { HintBasedCache hintBasedCache = new HintBasedCache(e => new NullDataSet(), LimboLogs.Instance); for (uint i = 0; i < 1000; i++) { Assert.Null(hintBasedCache.Get(i)); } }
public async Task Can_hint_far() { HintBasedCache hintBasedCache = new HintBasedCache(e => new NullDataSet(), LimboLogs.Instance); hintBasedCache.Hint(_guidA, 1000000000, 1000000000); await WaitFor(() => hintBasedCache.CachedEpochsCount == 1); Assert.NotNull(hintBasedCache.Get(1000000000 / 30000)); }
public async Task With_hint_returns_value() { HintBasedCache hintBasedCache = new HintBasedCache(e => new NullDataSet(), LimboLogs.Instance); hintBasedCache.Hint(_guidA, 0, 200000); await WaitFor(() => hintBasedCache.CachedEpochsCount == 7); for (uint i = 0; i < 7; i++) { Assert.NotNull(hintBasedCache.Get(i)); } }
public async Task Different_users_can_use_cache() { HintBasedCache hintBasedCache = new HintBasedCache(e => new NullDataSet(), LimboLogs.Instance); hintBasedCache.Hint(_guidA, 0, 29999); hintBasedCache.Hint(_guidB, 30000, 59999); await WaitFor(() => hintBasedCache.CachedEpochsCount == 2); for (uint i = 0; i < 2; i++) { Assert.NotNull(hintBasedCache.Get(i)); } }