/// <summary> /// Constructor</summary> /// <remarks>As a convenience for client code, preset the supported Unicode characters according /// to the computer's current culture setting. This can be overridden by the /// UnicodeMapper property. /// For 2-character language codes in ISO 639-1: http://www.loc.gov/standards/iso639-2/php/code_list.php . /// For unicode ranges: http://en.wikipedia.org/wiki/Summary_of_Unicode_character_assignments . /// The maximum possible OpenGl display list ID is ushort.MaxValue.</remarks> static OpenGlCore() { s_fontMap = new IntSet(); //add ASCII, Basic Latin, and Latin-1 Supplement s_fontMap.AddRange(0x0000, 0x00FF); //add additional glyphs for some of our client languages string languageCode = CultureInfo.CurrentCulture.TwoLetterISOLanguageName; switch (languageCode) { case "ja": //Japan s_fontMap.AddRange(0x30A0, 0x30FF); //Katakana break; case "nl": //Netherlands (Dutch, Flemis) s_fontMap.AddRange(0x0100, 0x024F); //Latin Extended-A, Latin Extended-B s_fontMap.AddRange(0x1E00, 0x1EFF); //Latin Extended Additional break; default: break; } }
/// <summary> /// Constructor</summary> /// <remarks>As a convenience for client code, preset the supported Unicode characters according /// to the computer's current culture setting. This can be overridden by the /// UnicodeMapper property. /// For 2-character language codes in ISO 639-1: http://www.loc.gov/standards/iso639-2/php/code_list.php . /// For unicode ranges: http://en.wikipedia.org/wiki/Summary_of_Unicode_character_assignments . /// The maximum possible OpenGl display list ID is ushort.MaxValue.</remarks> static OpenGlCore() { s_fontMap = new IntSet(); //add ASCII, Basic Latin, and Latin-1 Supplement s_fontMap.AddRange(0x0000, 0x00FF); //add additional glyphs for some of our client languages string languageCode = CultureInfo.CurrentCulture.TwoLetterISOLanguageName; switch (languageCode) { case "ja"://Japan s_fontMap.AddRange(0x30A0, 0x30FF);//Katakana break; case "nl"://Netherlands (Dutch, Flemis) s_fontMap.AddRange(0x0100, 0x024F);//Latin Extended-A, Latin Extended-B s_fontMap.AddRange(0x1E00, 0x1EFF);//Latin Extended Additional break; default: break; } }
public void TestEverything() { IntSet intSet; IEnumerator <IntSet.Range> ranges; int index; // {3-5} - {4} = {3,5} intSet = new IntSet(); intSet.AddRange(3, 5); intSet.Remove(4); Assert.True(intSet.Count == 2); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 3 && ranges.Current.Max == 3 && ranges.Current.PreviousItemsCount == 0); ranges.MoveNext(); Assert.True(ranges.Current.Min == 5 && ranges.Current.Max == 5 && ranges.Current.PreviousItemsCount == 1); Verify(intSet); // {3,5} + {4} = {3-5} intSet.Add(4); Assert.True(intSet.Count == 3); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 3 && ranges.Current.Max == 5 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {3-5} + {6-9} = {3-9} intSet.AddRange(6, 9); Assert.True(intSet.Count == 7); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 3 && ranges.Current.Max == 9 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {3-9} - {4} - {5} - {3} = {6-9} intSet.Remove(4); intSet.Remove(5); intSet.Remove(3); Assert.True(intSet.Count == 4); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 6 && ranges.Current.Max == 9 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {6-9} + {13-13} + {11} + {10-12} = {6-13} intSet.AddRange(13, 13); intSet.Add(11); Assert.True(intSet.Contains(6)); Assert.True(intSet.Contains(7)); Assert.True(intSet.Contains(8)); Assert.True(intSet.Contains(9)); Assert.True(intSet.Contains(11)); Assert.True(intSet.Contains(13)); Assert.True(intSet.Contains(6, out index) && index == 0); Assert.True(intSet.Contains(7, out index) && index == 1); Assert.True(intSet.Contains(8, out index) && index == 2); Assert.True(intSet.Contains(9, out index) && index == 3); Assert.True(intSet.Contains(11, out index) && index == 4); Assert.True(intSet.Contains(13, out index) && index == 5); Assert.False(intSet.Contains(5)); Assert.False(intSet.Contains(14)); Assert.False(intSet.Contains(10)); Assert.False(intSet.Contains(12)); intSet.AddRange(10, 12); Assert.True(intSet.Contains(6)); Assert.True(intSet.Contains(7)); Assert.True(intSet.Contains(8)); Assert.True(intSet.Contains(9)); Assert.True(intSet.Contains(10)); Assert.True(intSet.Contains(11)); Assert.True(intSet.Contains(12)); Assert.True(intSet.Contains(13)); Assert.False(intSet.Contains(5)); Assert.False(intSet.Contains(14)); Assert.True(intSet.Count == 8); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 6 && ranges.Current.Max == 13 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {6-13} - {6-12} = {13} intSet.RemoveRange(6, 12); Assert.True(intSet.Count == 1); Assert.True(intSet.Contains(13)); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 13 && ranges.Current.Max == 13 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {13} - {13-13} = {} intSet.RemoveRange(13, 13); Assert.True(intSet.Count == 0); Assert.False(intSet.Contains(13)); ranges = intSet.Ranges.GetEnumerator(); Assert.False(ranges.MoveNext()); Verify(intSet); // {} + {5-9} - {6-7} = {5,8-9} intSet.AddRange(5, 9); intSet.RemoveRange(6, 7); Assert.True(intSet.Count == 3); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 5 && ranges.Current.Max == 5 && ranges.Current.PreviousItemsCount == 0); ranges.MoveNext(); Assert.True(ranges.Current.Min == 8 && ranges.Current.Max == 9 && ranges.Current.PreviousItemsCount == 1); Assert.False(ranges.MoveNext()); Verify(intSet); // test Clear() intSet.Clear(); Verify(intSet); // randomly add and remove Random rnd = new Random(0); for (int i = 0; i < 1000; i++) { int one; int begin; int end; begin = rnd.Next(0, 100); end = begin + rnd.Next(0, 7); intSet.AddRange(begin, end); one = rnd.Next(0, 100); intSet.Add(one); begin = rnd.Next(0, 100); end = begin + rnd.Next(0, 7); intSet.RemoveRange(begin, end); one = rnd.Next(0, 100); intSet.Remove(one); Verify(intSet); } // test locking intSet.Lock(); Assert.Throws <NotSupportedException>(delegate { intSet.Add(20); }); Assert.Throws <NotSupportedException>(delegate { intSet.AddRange(20, 20); }); Assert.Throws <NotSupportedException>(delegate { intSet.Remove(6); }); Assert.Throws <NotSupportedException>(delegate { intSet.RemoveRange(1, 20); }); Verify(intSet); }
public void TestEverything() { IntSet intSet; IEnumerator<IntSet.Range> ranges; int index; // {3-5} - {4} = {3,5} intSet = new IntSet(); intSet.AddRange(3, 5); intSet.Remove(4); Assert.True(intSet.Count == 2); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 3 && ranges.Current.Max == 3 && ranges.Current.PreviousItemsCount == 0); ranges.MoveNext(); Assert.True(ranges.Current.Min == 5 && ranges.Current.Max == 5 && ranges.Current.PreviousItemsCount == 1); Verify(intSet); // {3,5} + {4} = {3-5} intSet.Add(4); Assert.True(intSet.Count == 3); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 3 && ranges.Current.Max == 5 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {3-5} + {6-9} = {3-9} intSet.AddRange(6, 9); Assert.True(intSet.Count == 7); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 3 && ranges.Current.Max == 9 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {3-9} - {4} - {5} - {3} = {6-9} intSet.Remove(4); intSet.Remove(5); intSet.Remove(3); Assert.True(intSet.Count == 4); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 6 && ranges.Current.Max == 9 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {6-9} + {13-13} + {11} + {10-12} = {6-13} intSet.AddRange(13, 13); intSet.Add(11); Assert.True(intSet.Contains(6)); Assert.True(intSet.Contains(7)); Assert.True(intSet.Contains(8)); Assert.True(intSet.Contains(9)); Assert.True(intSet.Contains(11)); Assert.True(intSet.Contains(13)); Assert.True(intSet.Contains(6, out index) && index == 0); Assert.True(intSet.Contains(7, out index) && index == 1); Assert.True(intSet.Contains(8, out index) && index == 2); Assert.True(intSet.Contains(9, out index) && index == 3); Assert.True(intSet.Contains(11, out index) && index == 4); Assert.True(intSet.Contains(13, out index) && index == 5); Assert.False(intSet.Contains(5)); Assert.False(intSet.Contains(14)); Assert.False(intSet.Contains(10)); Assert.False(intSet.Contains(12)); intSet.AddRange(10, 12); Assert.True(intSet.Contains(6)); Assert.True(intSet.Contains(7)); Assert.True(intSet.Contains(8)); Assert.True(intSet.Contains(9)); Assert.True(intSet.Contains(10)); Assert.True(intSet.Contains(11)); Assert.True(intSet.Contains(12)); Assert.True(intSet.Contains(13)); Assert.False(intSet.Contains(5)); Assert.False(intSet.Contains(14)); Assert.True(intSet.Count == 8); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 6 && ranges.Current.Max == 13 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {6-13} - {6-12} = {13} intSet.RemoveRange(6, 12); Assert.True(intSet.Count == 1); Assert.True(intSet.Contains(13)); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 13 && ranges.Current.Max == 13 && ranges.Current.PreviousItemsCount == 0); Assert.False(ranges.MoveNext()); Verify(intSet); // {13} - {13-13} = {} intSet.RemoveRange(13, 13); Assert.True(intSet.Count == 0); Assert.False(intSet.Contains(13)); ranges = intSet.Ranges.GetEnumerator(); Assert.False(ranges.MoveNext()); Verify(intSet); // {} + {5-9} - {6-7} = {5,8-9} intSet.AddRange(5, 9); intSet.RemoveRange(6, 7); Assert.True(intSet.Count == 3); ranges = intSet.Ranges.GetEnumerator(); ranges.MoveNext(); Assert.True(ranges.Current.Min == 5 && ranges.Current.Max == 5 && ranges.Current.PreviousItemsCount == 0); ranges.MoveNext(); Assert.True(ranges.Current.Min == 8 && ranges.Current.Max == 9 && ranges.Current.PreviousItemsCount == 1); Assert.False(ranges.MoveNext()); Verify(intSet); // test Clear() intSet.Clear(); Verify(intSet); // randomly add and remove Random rnd = new Random(0); for (int i = 0; i < 1000; i++) { int one; int begin; int end; begin = rnd.Next(0, 100); end = begin + rnd.Next(0, 7); intSet.AddRange(begin, end); one = rnd.Next(0, 100); intSet.Add(one); begin = rnd.Next(0, 100); end = begin + rnd.Next(0, 7); intSet.RemoveRange(begin, end); one = rnd.Next(0, 100); intSet.Remove(one); Verify(intSet); } // test locking intSet.Lock(); Assert.Throws<NotSupportedException>(delegate { intSet.Add(20); }); Assert.Throws<NotSupportedException>(delegate { intSet.AddRange(20, 20); }); Assert.Throws<NotSupportedException>(delegate { intSet.Remove(6); }); Assert.Throws<NotSupportedException>(delegate { intSet.RemoveRange(1, 20); }); Verify(intSet); }