private static void AddOrUpdateInner(int i, MonsterIndexBackedIndex.View <int, string> thing) { thing.AddOrUpdate(i, "hello"); Assert.Equal("hello", thing.GetOrThrow(i)); thing.AddOrUpdate(i, "world hello"); Assert.Equal("world hello", thing.GetOrThrow(i)); }
private static void GetOrThrowInner(int i, MonsterIndexBackedIndex.View <int, string> target) { Assert.ThrowsAny <Exception>(() => target.GetOrThrow(i)); Assert.True(target.TryAdd(i, "1")); Assert.Equal("1", target.GetOrThrow(i)); }
private static void TryGetValueInner(int i, MonsterIndexBackedIndex.View <int, string> target) { Assert.False(target.TryGetValue(i, out var _)); Assert.True(target.TryAdd(i, "1")); Assert.True(target.TryGetValue(i, out var second)); Assert.Equal("1", second); }
public async Task AddUpdateParallelSameView() { var thing = new MonsterIndexBackedIndex.View <int, string>(); var tasks = new List <Task>(); for (var i = 0; i < 500 * 4; i += 4) { var j = i; tasks.Add(Task.Run(() => AddOrUpdateInner(j, thing))); tasks.Add(Task.Run(() => GetOrAddInner(j + 1, thing))); tasks.Add(Task.Run(() => TryGetValueInner(j + 2, thing))); tasks.Add(Task.Run(() => GetOrThrowInner(j + 3, thing))); } await Task.WhenAll(tasks.ToArray()); }
public void GetOrThrow(int i) { var target = new MonsterIndexBackedIndex.View <int, string>(); GetOrThrowInner(i, target); }
public void TryGetValue(int i) { var target = new MonsterIndexBackedIndex.View <int, string>(); TryGetValueInner(i, target); }
private static void GetOrAddInner(int i, MonsterIndexBackedIndex.View <int, string> thing) { Assert.Equal("not hello", thing.GetOrAdd(i, "not hello")); Assert.Equal("not hello", thing.GetOrAdd(i, "hello")); }
public void GetOrAdd(int i) { var thing = new MonsterIndexBackedIndex.View <int, string>(); GetOrAddInner(i, thing); }
public void AddOrUpdate(int i) { var thing = new MonsterIndexBackedIndex.View <int, string>(); AddOrUpdateInner(i, thing); }