1 // OpenTween - Client of Twitter
2 // Copyright (c) 2015 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
3 // All rights reserved.
5 // This file is part of OpenTween.
7 // This program is free software; you can redistribute it and/or modify it
8 // under the terms of the GNU General Public License as published by the Free
9 // Software Foundation; either version 3 of the License, or (at your option)
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 // You should have received a copy of the GNU General Public License along
18 // with this program. If not, see <http://www.gnu.org/licenses/>, or write to
19 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
20 // Boston, MA 02110-1301, USA.
23 using System.Collections;
24 using System.Collections.Generic;
27 using System.Threading.Tasks;
32 public class IndexedSortedSetTest
35 public void IndexedSortedSet_Test()
37 var set = new IndexedSortedSet<int>();
42 Assert.Equal(3, set.Count);
43 Assert.Equal(20, set[0]);
44 Assert.Equal(100, set[1]);
45 Assert.Equal(600, set[2]);
50 Assert.Equal(3, set.Count);
51 Assert.Equal(5, set[0]);
52 Assert.Equal(20, set[1]);
53 Assert.Equal(600, set[2]);
57 public void Constructor_Test()
59 var set = new IndexedSortedSet<int>();
65 Assert.Equal(new[] { 1, 2, 3 }, set);
69 public void Constructor_WithComparerTest()
72 var comparer = Comparer<int>.Create((x, y) => -x.CompareTo(y));
73 var set = new IndexedSortedSet<int>(comparer);
79 Assert.Equal(new[] { 3, 2, 1 }, set);
83 public void Constructor_WithEnumerableTest()
85 var set = new IndexedSortedSet<int>(new[] { 2, 1, 3 });
87 Assert.Equal(new[] { 1, 2, 3 }, set);
91 public void Constructor_WithEnumerableAndComparerTest()
94 var comparer = Comparer<int>.Create((x, y) => -x.CompareTo(y));
95 var set = new IndexedSortedSet<int>(new[] { 2, 1, 3 }, comparer);
97 Assert.Equal(new[] { 3, 2, 1 }, set);
101 public void Count_Test()
103 var set = new IndexedSortedSet<int>();
112 public void IsReadOnly_Test()
114 var set = new IndexedSortedSet<int>();
115 Assert.False(set.IsReadOnly);
119 public void Getter_Test()
121 var set = new IndexedSortedSet<int> { 1, 2, 3 };
123 Assert.Equal(1, set[0]);
124 Assert.Equal(2, set[1]);
125 Assert.Equal(3, set[2]);
127 Assert.Throws<ArgumentOutOfRangeException>(() => set[-1]);
128 Assert.Throws<ArgumentOutOfRangeException>(() => set[99]);
132 public void Add_Test()
134 var set = new IndexedSortedSet<int>();
136 Assert.True(set.Add(3));
137 Assert.True(set.Add(1));
138 Assert.True(set.Add(2));
139 Assert.Equal(new[] { 1, 2, 3 }, set);
141 Assert.False(set.Add(1));
142 Assert.Equal(new[] { 1, 2, 3 }, set);
146 public void Add_ICollectionTest()
148 var set = new IndexedSortedSet<int>();
149 var collection = (ICollection<int>)set;
154 Assert.Equal(new[] { 1, 2, 3 }, set);
157 Assert.Equal(new[] { 1, 2, 3 }, set);
161 public void Remove_Test()
163 var set = new IndexedSortedSet<int> { 1, 2, 3 };
165 Assert.True(set.Remove(2));
166 Assert.Equal(new[] { 1, 3 }, set);
168 Assert.False(set.Remove(999));
169 Assert.Equal(new[] { 1, 3 }, set);
173 public void Clear_Test()
175 var set = new IndexedSortedSet<int> { 1, 2, 3 };
182 public void Contains_Test()
184 var set = new IndexedSortedSet<int> { 1, 2, 3 };
186 Assert.Contains(2, set);
187 Assert.DoesNotContain(999, set);
191 public void IndexOf_Test()
193 var set = new IndexedSortedSet<int> { 10, 15, 20 };
195 Assert.Equal(0, set.IndexOf(10));
196 Assert.Equal(1, set.IndexOf(15));
197 Assert.Equal(2, set.IndexOf(20));
199 Assert.Equal(-1, set.IndexOf(0));
200 Assert.Equal(-1, set.IndexOf(12));
201 Assert.Equal(-1, set.IndexOf(50));
205 public void RemoveAt_Test()
207 var set = new IndexedSortedSet<int> { 1, 2, 3 };
210 Assert.Equal(new[] { 1, 3 }, set);
212 Assert.Throws<ArgumentOutOfRangeException>(() => set.RemoveAt(-1));
213 Assert.Throws<ArgumentOutOfRangeException>(() => set.RemoveAt(99));
217 public void CopyTo_Test()
219 var set = new IndexedSortedSet<string> { "aaa", "bbb", "ccc" };
221 var array = new string[5];
222 set.CopyTo(array, 0);
224 Assert.Equal("aaa", array[0]);
225 Assert.Equal("bbb", array[1]);
226 Assert.Equal("ccc", array[2]);
227 Assert.Null(array[3]);
228 Assert.Null(array[4]);
230 array = new string[5];
231 set.CopyTo(array, 1);
233 Assert.Null(array[0]);
234 Assert.Equal("aaa", array[1]);
235 Assert.Equal("bbb", array[2]);
236 Assert.Equal("ccc", array[3]);
237 Assert.Null(array[4]);
239 array = new string[5];
241 Assert.Throws<ArgumentException>(() => set.CopyTo(array, 3));
242 Assert.Throws<ArgumentException>(() => set.CopyTo(array, 5));
243 Assert.Throws<ArgumentOutOfRangeException>(() => set.CopyTo(array, -1));
244 Assert.Throws<ArgumentNullException>(() => set.CopyTo(null, 0));
248 public void Enumerator_Test()
250 var set = new IndexedSortedSet<string> { "aaa", "bbb", "ccc" };
252 var enumerator = set.GetEnumerator();
254 Assert.True(enumerator.MoveNext());
255 Assert.Equal("aaa", enumerator.Current);
256 Assert.True(enumerator.MoveNext());
257 Assert.Equal("bbb", enumerator.Current);
258 Assert.True(enumerator.MoveNext());
259 Assert.Equal("ccc", enumerator.Current);
260 Assert.False(enumerator.MoveNext());
264 public void Enumerator_NonGenericTest()
266 var set = new IndexedSortedSet<string> { "aaa", "bbb", "ccc" };
268 var enumerator = ((IEnumerable)set).GetEnumerator();
270 Assert.True(enumerator.MoveNext());
271 Assert.Equal("aaa", enumerator.Current);
272 Assert.True(enumerator.MoveNext());
273 Assert.Equal("bbb", enumerator.Current);
274 Assert.True(enumerator.MoveNext());
275 Assert.Equal("ccc", enumerator.Current);
276 Assert.False(enumerator.MoveNext());
280 public void UnionWith_Test()
282 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
285 set.UnionWith(new[] { 6, 4, 3, 5 });
287 Assert.Equal(new[] { 1, 2, 3, 4, 5, 6 }, set);
291 public void IntersectWith_Test()
293 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
296 set.IntersectWith(new[] { 6, 4, 3, 5 });
298 Assert.Equal(new[] { 3, 4 }, set);
302 public void ExceptWith_Test()
304 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
307 set.ExceptWith(new[] { 6, 4, 3, 5 });
309 Assert.Equal(new[] { 1, 2 }, set);
313 public void SymmetricExceptWith_Test()
315 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
318 set.SymmetricExceptWith(new[] { 6, 4, 3, 5 });
320 Assert.Equal(new[] { 1, 2, 5, 6 }, set);
324 public void IsSubsetOf_Test()
326 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
329 Assert.True(set.IsSubsetOf(new[] { 1, 2, 3, 4, 5, 6 }));
330 Assert.True(set.IsSubsetOf(new[] { 1, 2, 3, 4 }));
331 Assert.False(set.IsSubsetOf(new[] { 1, 3, 5, 7 }));
332 Assert.False(set.IsSubsetOf(new[] { -1, -2, -3, -4 }));
336 public void IsSupersetOf_Test()
338 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
341 Assert.True(set.IsSupersetOf(new[] { 2, 3 }));
342 Assert.True(set.IsSupersetOf(new[] { 1, 2, 3, 4 }));
343 Assert.False(set.IsSupersetOf(new[] { 1, 2, 3, 4, 5, 6 }));
344 Assert.False(set.IsSupersetOf(new[] { -1, -2, -3, -4 }));
348 public void IsProperSubsetOf_Test()
350 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
353 Assert.True(set.IsProperSubsetOf(new[] { 1, 2, 3, 4, 5, 6 }));
354 Assert.False(set.IsProperSubsetOf(new[] { 1, 2, 3, 4 }));
355 Assert.False(set.IsProperSubsetOf(new[] { 1, 3, 5, 7 }));
356 Assert.False(set.IsProperSubsetOf(new[] { -1, -2, -3, -4 }));
360 public void IsProperSupersetOf_Test()
362 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
365 Assert.True(set.IsProperSupersetOf(new[] { 2, 3 }));
366 Assert.False(set.IsProperSupersetOf(new[] { 1, 2, 3, 4 }));
367 Assert.False(set.IsProperSupersetOf(new[] { 1, 2, 3, 4, 5, 6 }));
368 Assert.False(set.IsProperSupersetOf(new[] { -1, -2, -3, -4 }));
372 public void Overlaps_Test()
374 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
377 Assert.True(set.Overlaps(new[] { 1, 10, 100, 1000 }));
378 Assert.True(set.Overlaps(new[] { 1, 2, 3, 4 }));
379 Assert.False(set.Overlaps(new[] { -1, -2, -3, -4 }));
383 public void SetEquals_Test()
385 var set = new IndexedSortedSet<int> { 1, 2, 3, 4 };
388 Assert.True(set.SetEquals(new[] { 1, 2, 3, 4 }));
389 Assert.False(set.SetEquals(new[] { 1, 2 }));
390 Assert.False(set.SetEquals(new[] { 1, 2, 3, 4, 5, 6 }));
391 Assert.False(set.SetEquals(new[] { 8, 9 }));
394 Assert.True(set.SetEquals(new[] { 1, 2, 2, 3, 3, 4 }));