public void AddSetGetPop() { const int testSize = 1089; List <(ImmutableTrieList <int> list, List <int> expected)> result = new List <(ImmutableTrieList <int>, List <int>)>(); ImmutableTrieList <int> list = ImmutableTrieList <int> .Empty; result.Add((list, list.ToList())); // Add for (int i = 0; i < testSize; i++) { var expected = list.ToList(); expected.Add(i); list = list.Add(i); result.Add((list, expected)); Assert.Equal(i, list[i]); } // Set const int offset = 14; // setter offset for (int i = 0; i < testSize; i++) { var expected = list.ToList(); expected[i] = i + offset; list = list.SetItem(i, i + offset); result.Add((list, expected)); Assert.Equal(i + offset, list[i]); } // Pop for (int i = 0; i < testSize; i++) { int oldCount = list.Count; List <int> expected = list.ToList(); expected.RemoveAt(oldCount - 1); list = list.Pop(); result.Add((list, expected)); Assert.Equal(oldCount - 1, list.Count); } for (int tupleIndex = 0; tupleIndex < result.Count; tupleIndex++) { var tuple = result[tupleIndex]; Assert.Equal(tuple.list, tuple.expected); } }