void Can_handle_id_overflow_by_filling_spots() { ObjectTagger tagger = new ObjectTagger(10); List <object> handledObjects = new List <object>(); for (int i = 0; i < 9; i++) { var obj = new object(); tagger.GetOrCreateTag(obj); handledObjects.Add(obj); } // Ids are all used. handledObjects.Clear(); GC.Collect(2, GCCollectionMode.Forced, true); Thread.Sleep(100); // The next one is the already prepared next id. var obj10 = new object(); var tag10 = tagger.GetOrCreateTag(obj10); tag10.Should().Be(10ul); // The next after that will overflow. var obj1 = new object(); var tag1 = tagger.GetOrCreateTag(obj1); tag1.Should().Be(1ul); }
void Can_deliver_same_tag_for_same_instance() { ObjectTagger tagger = new ObjectTagger(); var obj = new object(); var tag1 = tagger.GetOrCreateTag(obj); var tag2 = tagger.GetOrCreateTag(obj); tag1.Should().Be(tag2); }
void Can_detect_id_overflow() { ObjectTagger tagger = new ObjectTagger(10); List <object> handledObjects = new List <object>(); for (int i = 0; i < 9; i++) { var obj = new object(); tagger.GetOrCreateTag(obj); handledObjects.Add(obj); } var lastObj = new object(); Assert.Throws <Exception>(() => { tagger.GetOrCreateTag(lastObj); }); }