private async Task Function() { var count = 1_000_000; var ints = new AsyncObservableKeyedSet <int, int>(i => i); var t1 = Task.Run(async() => { for (int i = 0; i < count; i++) { await ints.AddAsync(i); } Console.WriteLine($"FINISHED ADDING FROM THE FIRST THREAD, {ints.Count} ITEMS IN DICTIONARY"); }); var t2 = Task.Run(async() => { for (int i = 0; i < count; i++) { await ints.AddAsync(i + 1_000_000); //.ConfigureAwait(false); } Console.WriteLine($"FINISHED ADDING FROM THE second THREAD, {ints.Count} ITEMS IN DICTIONARY"); }); await Task.WhenAll(t1, t2); Console.WriteLine(ints.Count + " items"); }
public void BasicKeyIndexedAccess() { var set = new AsyncObservableKeyedSet <int, int>(param => param / 5, Context, new[] { 15, 20, 25 }); Ensure(set[3], Is.EqualTo(15)); Ensure(set[5], Is.EqualTo(25)); }
public void TryAddDuplicateItemReturnsFalse() { var set = new AsyncObservableKeyedSet <int, int>(param => param, Context, new[] { 1, 2, 3 }); Ensure(set.TryAddAsync(2), Is.False); Ensure(set.Count, Is.EqualTo(3)); Ensure(set.TryAddAsync(67532), Is.True); Ensure(set.Count, Is.EqualTo(4)); }
public void BasicRemoveKey() { var set = new AsyncObservableKeyedSet <int, int>(param => param / 5, Context, new[] { 15, 20, 25 }); Ensure(set.Count, Is.EqualTo(3)); Ensure(set.RemoveKeyAsync(3), Is.True); Ensure(set.Count, Is.EqualTo(2)); Ensure(set.RemoveKeyAsync(67532), Is.False); Ensure(set.Count, Is.EqualTo(2)); Ensure(set.RemoveKeyAsync(15), Is.False); Ensure(set.Count, Is.EqualTo(2)); }
public void ClearRemovesAllEntries() { var set = new AsyncObservableKeyedSet <int, int>(param => param, Context, new[] { 1, 436, 768, 79876, 5, 435, 4634, 243, 2 }); Ensure(set, Is.Not.Empty); Task.Run(set.ClearAsync).RunTaskSynchronously(); Ensure(set, Is.Empty); Ensure(set.Count, Is.Zero); foreach (var _ in set) { Assert.Fail(); } }
public void TryAddDuplicateKeyReturnsFalse() { var set = new AsyncObservableKeyedSet <int, int>(param => param % 5, Context, new[] { 15 }); Ensure(set.TryAddAsync(30), Is.False); Ensure(set.Count, Is.EqualTo(1)); Ensure(set.TryAddAsync(31), Is.True); Ensure(set.TryAddAsync(31), Is.False); Ensure(set.TryAddAsync(33), Is.True); Ensure(set.TryAddAsync(33), Is.False); Ensure(set.TryAddAsync(33), Is.False); Ensure(set.Count, Is.EqualTo(3)); Ensure(set.TryAddAsync(30), Is.False); Ensure(Task.Run(() => set.Count), Is.EqualTo(3)); Ensure(set.TryAddAsync(32), Is.True); Ensure(set.Count, Is.EqualTo(4)); }
// ReSharper disable once NotNullMemberIsNotInitialized - CorrespondingCollection can't be initialized here because it doesn't exist yet private FolderCollection(Func <bool> isDesiredThread, PauseTokenSource pauseTokenSource) { PauseTokenSource = pauseTokenSource; if (PauseTokenSource != null) { PauseToken = pauseTokenSource.Token; } Folders = new AsyncObservableKeyedSet <string, GameFolder>(folder => folder.Name, isDesiredThread, comparer: StringComparer.OrdinalIgnoreCase); InitDirectoryWatcher(); Folders.CollectionChanged += (sender, args) => { switch (args.Action) { case NotifyCollectionChangedAction.Add: case NotifyCollectionChangedAction.Remove: case NotifyCollectionChangedAction.Replace: args.OldItems?.OfType <GameFolder>() .Where(folder => folder.IsJunction) .ForEach(folder => JunctionTargetsDictionary.Remove(folder.JunctionTarget, folder)); args.NewItems?.OfType <GameFolder>() .Where(folder => folder.IsJunction) .ForEach(folder => JunctionTargetsDictionary.Add(folder.JunctionTarget, folder)); break; case NotifyCollectionChangedAction.Reset: JunctionTargetsDictionary.Clear(); break; case NotifyCollectionChangedAction.Move: break; default: throw new ArgumentOutOfRangeException(); } }; }
public void AddDuplicateThrowsException() { var set = new AsyncObservableKeyedSet <int, int>(param => param, Context, new[] { 1 }); EnsureException(() => set.AddAsync(1), Hurls.ArgumentException); }