public void SmartTransactionHashSetTest() { var tracker = new Tracker(Network.Main); var tx1 = new Transaction( "0100000003192a9e09a4eb4829dd92e437d50a6d544626a0c0a4345fe85754cf0b509c56da090000006a47304402205ae8feded01cff3dafa698481a0e941a5059b9de234e794335493f863da6b8b702207645e57ec428b553e57e30115eaa3eb8828069e7933e09e4c867d086de2d67290121022f4cae09039d26ee9481ac235d0c74a1c1cdb1780acbb4300ce5a14d2c7a69e0ffffffff05d2352f130dac517aba5e6fdf966d915b15fbf8c674a9809d7706fd9bc2c545290000006a4730440220771193a38f8e05e59dc8233b46e181c9a75808c0ec1efeeedfebe5c7018d2c1f02206c32485d4fab65d47d7d4392d937128af44e918bd0fdded4d0b82b0a9d316dcc0121028fc5d9cd68ba58123ff972bb73682019cd1ee395f92c0b72e73ebc7151e3fe43ffffffff1cb828c3dcb9abbf77d63dbc9a050c70a05c5d0f2988da89811803f7dee4f090050000006b483045022100e32f6195c4437c4a3f0de88157989830c6c0effcecd093324b2dd33b81b9743902203e9bf7f36dc0a879de165c96b137ca163c3506fc5ac9db377650632e1e922e4f01210358e1623b2ffdf9b0bc135026a5e8fdd1625f61424937b7c1cb6e47af1f06bd0affffffff026ba91a00000000001976a914cc17bf00ffba667e4f8ff425500b83f3a863922788acf60b0300000000001976a914f73f6ea0a99cbcc985a0dae57b9938e0dfc245c088ac00000000"); var tx2 = new Transaction( "0100000001c3dd09422c44e8cab3065aac65f1cc7befce2a0ea5d309d8d213ec08877dbd4b000000006a473044022001ab7769a0d735bbe4756260c30ab8127f4282cdd00b66991ca6bfc383b5005c02203d29981127717946bf05fc15177f3042aa0b995db786a868de4cc67bfd88801d0121037df55814a04730433b1ee3bcc8f089eef346e556d222b13f1a57a355fd8d07f6ffffffff0120300500000000001976a914f55586866f28d6db41529b8bd85db09e88221a1388ac00000000"); Assert.True(tracker.TrackedTransactions.TryAdd(new SmartTransaction(tx1, new Height(1)))); Assert.True(tracker.TrackedTransactions.TryAdd(new SmartTransaction(tx2, new Height(1)))); Assert.False(tracker.TrackedTransactions.TryAdd(new SmartTransaction(tx2, new Height(1)))); HashSet <SmartTransaction> stx = new HashSet <SmartTransaction>(); Assert.True(stx.Add(new SmartTransaction(tx1, new Height(1)))); Assert.True(stx.Add(new SmartTransaction(tx2, new Height(2)))); Assert.False(stx.Add(new SmartTransaction(tx2, new Height(3)))); ConcurrentHashSet <SmartTransaction> stxchs = new ConcurrentHashSet <SmartTransaction>(); Assert.True(stxchs.Add(new SmartTransaction(tx1, new Height(1)))); Assert.True(stxchs.Add(new SmartTransaction(tx2, new Height(2)))); Assert.False(stxchs.Add(new SmartTransaction(tx2, new Height(3)))); ConcurrentObservableHashSet <SmartTransaction> stxcohs = new ConcurrentObservableHashSet <SmartTransaction>(); Assert.True(stxcohs.TryAdd(new SmartTransaction(tx1, new Height(1)))); Assert.True(stxcohs.TryAdd(new SmartTransaction(tx2, new Height(2)))); Assert.False(stxcohs.TryAdd(new SmartTransaction(tx2, new Height(3)))); }
public void Test_ConcurrentObservableHashSet_RemoveRange_IEnumerable() { var initial = Enumerable.Range(0, 100); var startIndex = 50; var removeCount = 40; var toRemove = initial.Skip(startIndex).Take(removeCount).ToList(); var collection = new ConcurrentObservableHashSet <int>(); collection.AddRange(initial); Assert.AreEqual(100, collection.Count); // Record all the collection changed events List <(object, NotifyCollectionChangedEventArgs)> returnedList = new List <(object, NotifyCollectionChangedEventArgs)>(); collection.CollectionChanged += (s, e) => returnedList.Add((s, e)); collection.RemoveRange(toRemove); // Check just one collection changed event was fired Assert.AreEqual(1, returnedList.Count); (var returnedObject, var returnedArgs) = returnedList[0]; Assert.IsNotNull(returnedObject); Assert.IsNotNull(returnedArgs); Assert.AreEqual(returnedObject, collection); Assert.AreEqual(NotifyCollectionChangedAction.Remove, returnedArgs.Action); // Removed by values so index not relevant, should be -1 Assert.AreEqual(-1, returnedArgs.OldStartingIndex); Assert.IsNull(returnedArgs.NewItems); Assert.IsNotNull(returnedArgs.OldItems); Assert.AreEqual(removeCount, returnedArgs.OldItems.Count); Assert.IsTrue(CollectionsAreEqual(toRemove, returnedArgs.OldItems)); }
public void Test_ConcurrentObservableHashSet_Clear() { var initial = Enumerable.Range(0, 100).ToList(); var collection = new ConcurrentObservableHashSet <int>(); collection.AddRange(initial); Assert.AreEqual(100, collection.Count); // Record all the collection changed events List <(object, NotifyCollectionChangedEventArgs)> returnedList = new List <(object, NotifyCollectionChangedEventArgs)>(); collection.CollectionChanged += (s, e) => returnedList.Add((s, e)); collection.Clear(); // Check just one collection changed event was fired Assert.AreEqual(1, returnedList.Count); (var returnedObject, var returnedArgs) = returnedList[0]; Assert.IsNotNull(returnedObject); Assert.IsNotNull(returnedArgs); Assert.AreEqual(0, collection.Count); Assert.AreEqual(returnedObject, collection); Assert.AreEqual(NotifyCollectionChangedAction.Remove, returnedArgs.Action); Assert.IsNull(returnedArgs.NewItems); Assert.IsNotNull(returnedArgs.OldItems); Assert.AreEqual(initial.Count(), returnedArgs.OldItems.Count); Assert.IsTrue(CollectionsAreEqual(initial, returnedArgs.OldItems)); }
public void ConcurrentObservableHashSetSerializationTest() { var serializer = new BinaryFormatter(); var stream = new MemoryStream(); var collection = new ConcurrentObservableHashSet <string>(); for (int i = 0; i < 10; i++) { collection.Add("TestItem" + (i + 1).ToString()); } serializer.Serialize(stream, collection); stream.Position = 0; collection = serializer.Deserialize(stream) as ConcurrentObservableHashSet <string>; Assert.AreEqual(10, collection.Count); for (int i = 0; i < 10; i++) { Assert.IsTrue(collection.Contains("TestItem" + (i + 1).ToString())); } }
public void ConcurrentObservableHashSetTest() { ConcurrentObservableHashSet <string> hashSet = new ConcurrentObservableHashSet <string>(); var times = 0; hashSet.CollectionChanged += delegate { times++; }; hashSet.Clear(); // no fire hashSet.TryAdd("foo"); // fire hashSet.TryAdd("foo"); // no fire hashSet.TryAdd("moo"); // fire hashSet.TryRemove("foo"); // fire hashSet.Clear(); // fire Assert.Equal(4, times); }
public WalletService(KeyManager keyManager, IndexDownloader indexDownloader, CcjClient chaumianClient, MemPoolService memPool, NodesGroup nodes, string blocksFolderPath) { KeyManager = Guard.NotNull(nameof(keyManager), keyManager); Nodes = Guard.NotNull(nameof(nodes), nodes); IndexDownloader = Guard.NotNull(nameof(indexDownloader), indexDownloader); ChaumianClient = Guard.NotNull(nameof(chaumianClient), chaumianClient); MemPool = Guard.NotNull(nameof(memPool), memPool); WalletBlocks = new SortedDictionary <Height, uint256>(); ProcessedBlocks = new HashSet <uint256>(); WalletBlocksLock = new AsyncLock(); HandleFiltersLock = new AsyncLock(); Coins = new ConcurrentObservableHashSet <SmartCoin>(); BlocksFolderPath = Guard.NotNullOrEmptyOrWhitespace(nameof(blocksFolderPath), blocksFolderPath, trim: true); BlockFolderLock = new AsyncLock(); BlockDownloadLock = new AsyncLock(); AssertCleanKeysIndexed(21); _running = 0; if (Directory.Exists(BlocksFolderPath)) { if (IndexDownloader.Network == Network.RegTest) { Directory.Delete(BlocksFolderPath, true); Directory.CreateDirectory(BlocksFolderPath); } } else { Directory.CreateDirectory(BlocksFolderPath); } IndexDownloader.NewFilter += IndexDownloader_NewFilterAsync; IndexDownloader.Reorged += IndexDownloader_ReorgedAsync; MemPool.TransactionReceived += MemPool_TransactionReceived; }
public void ConcurrentObservableHashSetTest() { ConcurrentObservableHashSet <string> hashSet = new ConcurrentObservableHashSet <string>(); _times = 0; hashSet.CollectionChanged += HashSet_CollectionChanged; try { hashSet.Clear(); // no fire hashSet.TryAdd("foo"); // fire hashSet.TryAdd("foo"); // no fire hashSet.TryAdd("moo"); // fire hashSet.TryRemove("foo"); // fire hashSet.Clear(); // fire Assert.Equal(4, _times); } finally { hashSet.CollectionChanged -= HashSet_CollectionChanged; } }