📄 settests.cs
字号:
//******************************
// Written by Peter Golde
// Copyright (c) 2004-2005, Wintellect
//
// Use and restribution of this code is subject to the license agreement
// contained in the file "License.txt" accompanying this file.
//******************************
using System;
using System.Collections.Generic;
using System.Collections;
using NUnit.Framework;
namespace Wintellect.PowerCollections.Tests
{
[TestFixture]
public class SetTests
{
[Test]
public void RandomAddDelete()
{
const int SIZE = 50000;
bool[] present = new bool[SIZE];
Random rand = new Random();
Set<int> set1 = new Set<int>();
bool b;
// Add and delete values at random.
for (int i = 0; i < SIZE * 10; ++i) {
int v = rand.Next(SIZE);
if (present[v]) {
Assert.IsTrue(set1.Contains(v));
b = set1.Remove(v);
Assert.IsTrue(b);
present[v] = false;
}
else {
Assert.IsFalse(set1.Contains(v));
b = set1.Add(v);
Assert.IsFalse(b);
present[v] = true;
}
}
int count = 0;
foreach (bool x in present)
if (x)
++count;
Assert.AreEqual(count, set1.Count);
// Make sure the set has all the correct values, not in order.
foreach (int v in set1) {
Assert.IsTrue(present[v]);
present[v] = false;
}
// Make sure all were found.
count = 0;
foreach (bool x in present)
if (x)
++count;
Assert.AreEqual(0, count);
}
[Test]
public void ICollectionInterface()
{
string[] s_array = { "Foo", "Eric", "Clapton", "hello", "goodbye", "C#" };
Set<string> set1 = new Set<string>();
foreach (string s in s_array)
set1.Add(s);
Array.Sort(s_array);
InterfaceTests.TestCollection<string>((ICollection)set1, s_array, false);
}
[Test]
public void GenericICollectionInterface()
{
string[] s_array = { "Foo", "Eric", "Clapton", "hello", "goodbye", "C#", "Java" };
Set<string> set1 = new Set<string>();
foreach (string s in s_array)
set1.Add(s);
Array.Sort(s_array);
InterfaceTests.TestReadWriteCollectionGeneric<string>((ICollection<string>)set1, s_array, false);
}
[Test]
public void Add()
{
Set<string> set1 = new Set<string>(StringComparer.InvariantCultureIgnoreCase);
bool b;
b = set1.Add("hello"); Assert.IsFalse(b);
b = set1.Add("foo"); Assert.IsFalse(b);
b = set1.Add(""); Assert.IsFalse(b);
b = set1.Add("HELLO"); Assert.IsTrue(b);
b = set1.Add("foo"); Assert.IsTrue(b);
b = set1.Add(null); Assert.IsFalse(b);
b = set1.Add("Hello"); Assert.IsTrue(b);
b = set1.Add("Eric"); Assert.IsFalse(b);
b = set1.Add(null); Assert.IsTrue(b);
InterfaceTests.TestReadWriteCollectionGeneric(set1, new string[] { null, "", "Eric", "foo", "Hello" }, false);
}
[Test]
public void CountAndClear()
{
Set<string> set1 = new Set<string>(StringComparer.InvariantCultureIgnoreCase);
Assert.AreEqual(0, set1.Count);
set1.Add("hello"); Assert.AreEqual(1, set1.Count);
set1.Add("foo"); Assert.AreEqual(2, set1.Count);
set1.Add(""); Assert.AreEqual(3, set1.Count);
set1.Add("HELLO"); Assert.AreEqual(3, set1.Count);
set1.Add("foo"); Assert.AreEqual(3, set1.Count);
set1.Add(null); Assert.AreEqual(4, set1.Count);
set1.Add("Hello"); Assert.AreEqual(4, set1.Count);
set1.Add("Eric"); Assert.AreEqual(5, set1.Count);
set1.Add(null); Assert.AreEqual(5, set1.Count);
set1.Clear();
Assert.AreEqual(0, set1.Count);
bool found = false;
foreach (string s in set1)
found = true;
Assert.IsFalse(found);
}
[Test]
public void Remove()
{
Set<string> set1 = new Set<string>(StringComparer.InvariantCultureIgnoreCase);
bool b;
b = set1.Remove("Eric"); Assert.IsFalse(b);
b = set1.Add("hello"); Assert.IsFalse(b);
b = set1.Add("foo"); Assert.IsFalse(b);
b = set1.Add(""); Assert.IsFalse(b);
b = set1.Remove("HELLO"); Assert.IsTrue(b);
b = set1.Remove("hello"); Assert.IsFalse(b);
b = set1.Remove(null); Assert.IsFalse(b);
b = set1.Add("Hello"); Assert.IsFalse(b);
b = set1.Add("Eric"); Assert.IsFalse(b);
b = set1.Add(null); Assert.IsFalse(b);
b = set1.Remove(null); Assert.IsTrue(b);
b = set1.Add("Eric"); Assert.IsTrue(b);
b = set1.Remove("eRic"); Assert.IsTrue(b);
b = set1.Remove("eRic"); Assert.IsFalse(b);
set1.Clear();
b = set1.Remove(""); Assert.IsFalse(b);
}
[Test]
public void TryGetItem()
{
Set<string> set1 = new Set<string>(StringComparer.InvariantCultureIgnoreCase);
bool b;
string s;
b = set1.TryGetItem("Eric", out s); Assert.IsFalse(b); Assert.IsNull(s);
b = set1.Add(null); Assert.IsFalse(b);
b = set1.Add("hello"); Assert.IsFalse(b);
b = set1.Add("foo"); Assert.IsFalse(b);
b = set1.Add(""); Assert.IsFalse(b);
b = set1.TryGetItem("HELLO", out s); Assert.IsTrue(b); Assert.AreEqual("hello", s);
b = set1.Remove("hello"); Assert.IsTrue(b);
b = set1.TryGetItem("HELLO", out s); Assert.IsFalse(b); Assert.IsNull(s);
b = set1.TryGetItem("foo", out s); Assert.IsTrue(b); Assert.AreEqual("foo", s);
b = set1.Add("Eric"); Assert.IsFalse(b);
b = set1.TryGetItem("eric", out s); Assert.IsTrue(b); Assert.AreEqual("Eric", s);
b = set1.TryGetItem(null, out s); Assert.IsTrue(b); Assert.IsNull(s);
set1.Clear();
b = set1.TryGetItem("foo", out s); Assert.IsFalse(b); Assert.IsNull(s);
}
[Test]
public void AddMany()
{
Set<string> set1 = new Set<string>(StringComparer.InvariantCultureIgnoreCase);
set1.Add("foo");
set1.Add("Eric");
set1.Add("Clapton");
string[] s_array = { "FOO", "x", "elmer", "fudd", "Clapton", null };
set1.AddMany(s_array);
InterfaceTests.TestReadWriteCollectionGeneric(set1, new string[] { null, "Clapton", "elmer", "Eric", "FOO", "fudd", "x" }, false);
}
[Test]
public void RemoveMany()
{
Set<string> set1 = new Set<string>(StringComparer.InvariantCultureIgnoreCase);
set1.Add("foo");
set1.Add("Eric");
set1.Add("Clapton");
set1.Add(null);
set1.Add("fudd");
set1.Add("elmer");
string[] s_array = { "FOO", "jasmine", "eric", null };
int count = set1.RemoveMany(s_array);
Assert.AreEqual(3, count);
InterfaceTests.TestReadWriteCollectionGeneric(set1, new string[] { "Clapton", "elmer", "fudd" }, false);
set1.Clear();
set1.Add("foo");
set1.Add("Eric");
set1.Add("Clapton");
set1.Add(null);
set1.Add("fudd");
count = set1.RemoveMany(set1);
Assert.AreEqual(5, count);
Assert.AreEqual(0, set1.Count);
}
[Test]
public void Exists()
{
Set<double> set1 = new Set<double>(new double[] { 4.5, 1.2, 7.6, -7.6, -0.04, 1.78, 10.11, 187.4 });
Assert.IsTrue(set1.Exists(delegate(double d) { return d > 100; }));
Assert.IsTrue(set1.Exists(delegate(double d) { return Math.Abs(d) == 0.04; }));
Assert.IsFalse(set1.Exists(delegate(double d) { return d < -10.0; }));
set1.Clear();
Assert.IsFalse(set1.Exists(delegate(double d) { return Math.Abs(d) == 0.04; }));
}
[Test]
public void TrueForAll()
{
Set<double> set1 = new Set<double>(new double[] { 4.5, 1.2, 7.6, -7.6, -0.04, 1.78, 10.11, 187.4 });
Assert.IsFalse(set1.TrueForAll(delegate(double d) { return d > 100; }));
Assert.IsFalse(set1.TrueForAll(delegate(double d) { return Math.Abs(d) < 10; }));
Assert.IsTrue(set1.TrueForAll(delegate(double d) { return d > -10; }));
Assert.IsTrue(set1.TrueForAll(delegate(double d) { return Math.Abs(d) < 200; }));
set1.Clear();
Assert.IsTrue(set1.TrueForAll(delegate(double d) { return Math.Abs(d) == 0.04; }));
}
[Test]
public void CountWhere()
{
Set<double> set1 = new Set<double>(new double[] { 4.5, 1.2, 7.6, -7.6, -0.04, 1.78, 10.11, 187.4 });
Assert.AreEqual(0, set1.CountWhere(delegate(double d) { return d > 200; }));
Assert.AreEqual(6, set1.CountWhere(delegate(double d) { return Math.Abs(d) < 10; }));
Assert.AreEqual(8, set1.CountWhere(delegate(double d) { return d > -10; }));
Assert.AreEqual(4, set1.CountWhere(delegate(double d) { return Math.Abs(d) > 5; }));
set1.Clear();
Assert.AreEqual(0, set1.CountWhere(delegate(double d) { return Math.Abs(d) < 10; }));
}
[Test]
public void RemoveAll()
{
Set<double> set1 = new Set<double>(new double[] { 4.5, 1.2, 7.6, -0.04, -7.6, 1.78, 10.11, 187.4 });
set1.RemoveAll(delegate(double d) { return Math.Abs(d) > 5; });
InterfaceTests.TestReadWriteCollectionGeneric(set1, new double[] { -0.04, 1.2, 1.78, 4.5 }, false);
set1 = new Set<double>(new double[] { 4.5, 1.2, 7.6, -0.04, -7.6, 1.78, 10.11, 187.4 });
set1.RemoveAll(delegate(double d) { return d == 0; });
InterfaceTests.TestReadWriteCollectionGeneric(set1, new double[] { -7.6, -0.04, 1.2, 1.78, 4.5, 7.6, 10.11, 187.4 }, false);
set1 = new Set<double>(new double[] { 4.5, 1.2, 7.6, -0.04, -7.6, 1.78, 10.11, 187.4 });
set1.RemoveAll(delegate(double d) { return d < 200; });
Assert.AreEqual(0, set1.Count);
}
[Test]
public void FindAll()
{
Set<double> set1 = new Set<double>(new double[] { 4.5, 1.2, 7.6, -0.04, -7.6, 1.78, 10.11, 187.4 });
double[] expected = { -7.6, 7.6, 10.11, 187.4 };
int i;
i = 0;
foreach (double x in set1.FindAll(delegate(double d) { return Math.Abs(d) > 5; })) {
int index = Array.IndexOf(expected, x);
Assert.IsTrue(index >= 0);
Assert.AreEqual(expected[index], x);
expected[index] = double.NaN;
++i;
}
Assert.AreEqual(expected.Length, i);
}
[Test, ExpectedException(typeof(InvalidOperationException))]
public void FailFastEnumerator1()
{
Set<double> set1 = new Set<double>();
double d = 1.218034;
for (int i = 0; i < 50; ++i) {
set1.Add(d);
d = d * 1.3451 - .31;
}
// should throw once the set is modified.
foreach (double k in set1) {
if (k > 3.0)
set1.Add(1.0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -