A game framework written with osu! in mind.
1// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
2// See the LICENCE file in the repository root for full licence text.
3
4using Newtonsoft.Json;
5using NUnit.Framework;
6using osu.Framework.Lists;
7
8namespace osu.Framework.Tests.IO
9{
10 [TestFixture]
11 public class TestSortedListSerialization
12 {
13 [Test]
14 public void TestUnsortedSerialization()
15 {
16 var original = new SortedList<int>();
17 original.AddRange(new[] { 1, 2, 3, 4, 5, 6 });
18
19 var deserialized = JsonConvert.DeserializeObject<SortedList<int>>(JsonConvert.SerializeObject(original));
20
21 Assert.AreEqual(original.Count, deserialized?.Count, "Counts are not equal");
22 for (int i = 0; i < original.Count; i++)
23 Assert.AreEqual(original[i], deserialized?[i], $"Item at index {i} differs");
24 }
25
26 [Test]
27 public void TestSortedSerialization()
28 {
29 var original = new SortedList<int>();
30 original.AddRange(new[] { 6, 5, 4, 3, 2, 1 });
31
32 var deserialized = JsonConvert.DeserializeObject<SortedList<int>>(JsonConvert.SerializeObject(original));
33
34 Assert.AreEqual(original.Count, deserialized?.Count, "Counts are not equal");
35 for (int i = 0; i < original.Count; i++)
36 Assert.AreEqual(original[i], deserialized?[i], $"Item at index {i} differs");
37 }
38
39 [Test]
40 public void TestEmptySerialization()
41 {
42 var original = new SortedList<int>();
43 var deserialized = JsonConvert.DeserializeObject<SortedList<int>>(JsonConvert.SerializeObject(original));
44
45 Assert.AreEqual(original.Count, deserialized?.Count, "Counts are not equal");
46 }
47
48 [Test]
49 public void TestCustomComparer()
50 {
51 static int compare(int i1, int i2) => i2.CompareTo(i1);
52
53 var original = new SortedList<int>(compare);
54 original.AddRange(new[] { 1, 2, 3, 4, 5, 6 });
55
56 var deserialized = new SortedList<int>(compare);
57 JsonConvert.PopulateObject(JsonConvert.SerializeObject(original), deserialized);
58
59 Assert.AreEqual(original.Count, deserialized.Count, "Counts are not equal");
60 for (int i = 0; i < original.Count; i++)
61 Assert.AreEqual(original[i], deserialized[i], $"Item at index {i} differs");
62 }
63 }
64}