10using System.Collections;
11using System.Collections.Generic;
23 Assert.That(arg.
ToQuery().All(i => i < 5), Is.EqualTo(
24 arg.
ToList().All(i => i < 5)));
26 Assert.That(arg.
ToQuery().All(i => i != 8), Is.EqualTo(
27 arg.
ToList().All(i => i != 8)));
32 Assert.That(arg.
ToQuery().Any(i => i == 4), Is.EqualTo(
33 arg.
ToList().Query().Any(i => i == 4)));
39 const int HEIGHT = 17;
41 int[,] array =
new int[WIDTH, HEIGHT];
43 for (
int i = 0; i < WIDTH; i++) {
44 for (
int j = 0; j < HEIGHT; j++) {
45 array[i, j] = counter++;
49 Assert.That(array.Query().Count(), Is.EqualTo(WIDTH * HEIGHT));
50 foreach (var value
in Enumerable.Range(0, WIDTH * HEIGHT)) {
51 Assert.That(array.Query().Contains(value));
57 if (arg0.
ToList().Count == 0) {
58 Assert.Ignore(
"Ignore empty queries for average test.");
62 Assert.That(arg0.
ToQuery().Select(t => (
double)t).Average(), Is.EqualTo(
63 arg0.
ToList().Average()).Within(0.001).Percent);
68 object[] objs =
new object[] {
"Hello",
"World",
"These",
"Are",
"All",
"Strings" };
70 Assert.That(objs.Cast<
string>().SequenceEqual(
71 objs.Query().Cast<
string>().ToList()));
76 Assert.That(arg0.
ToQuery().Concat(arg1.
ToList()).ToList(), Is.EquivalentTo(
79 Assert.That(arg0.
ToQuery().Concat(arg1.
ToQuery()).ToList(), Is.EquivalentTo(
85 Assert.That(arg.
ToQuery().Contains(3), Is.EqualTo(
86 arg.
ToList().Contains(3)));
88 Assert.That(arg.
ToQuery().Contains(9), Is.EqualTo(
89 arg.
ToList().Contains(9)));
94 Assert.That(arg.
ToQuery().Count(), Is.EqualTo(
97 Assert.That(arg.
ToQuery().Count(i => i % 2 == 0), Is.EqualTo(
98 arg.
ToList().Count(i => i % 2 == 0)));
103 Assert.That(arg.
ToQuery().Distinct().OrderBy(t => t).ToList(), Is.EquivalentTo(
104 arg.
ToList().Distinct().OrderBy(t => t).ToList()));
111 if (index >= list.Count) {
112 Assert.That(() => arg.
ToQuery().ElementAt(index), Throws.InstanceOf<IndexOutOfRangeException>());
114 Assert.That(arg.
ToQuery().ElementAt(index), Is.EqualTo(
115 arg.
ToList().ElementAt(index)));
128 if (list.Count == 0) {
129 Assert.That(() => arg.
ToQuery().First(), Throws.InvalidOperationException);
131 Assert.That(arg.
ToQuery().First(), Is.EqualTo(
135 if (list.Where(i => i % 2 == 0).Count() == 0) {
136 Assert.That(() => arg.
ToQuery().Where(i => i % 2 == 0).First(), Throws.InvalidOperationException);
138 Assert.That(arg.
ToQuery().First(i => i % 2 == 0), Is.EqualTo(
139 arg.
ToList().First(i => i % 2 == 0)));
145 Assert.That(arg.
ToQuery().FirstOrDefault(), Is.EqualTo(
146 arg.
ToList().FirstOrDefault()));
148 Assert.That(arg.
ToQuery().FirstOrDefault(i => i % 2 == 0), Is.EqualTo(
149 arg.
ToList().FirstOrDefault(i => i % 2 == 0)));
151 Assert.That(arg.
ToQuery().FirstOrDefault(i => i > 10), Is.EqualTo(
152 arg.
ToList().FirstOrDefault(i => i > 10)));
159 if (list.Count == 0) {
160 Assert.That(() => arg.
ToQuery().Fold((a, b) => a + b), Throws.InvalidOperationException);
162 Assert.That(arg.
ToQuery().Fold((a, b) => a + b), Is.EqualTo(
169 List<int> actual =
new List<int>();
170 foreach (var item
in arg0.
ToQuery().Concat(arg1.ToQuery())) {
173 Assert.That(actual, Is.EquivalentTo(
174 arg0.
ToList().Concat(arg1.ToList()).ToList()));
179 Assert.That(arg.
ToQuery().IndexOf(3), Is.EqualTo(
180 arg.
ToList().IndexOf(3)));
182 Assert.That(arg.
ToQuery().IndexOf(100), Is.EqualTo(
183 arg.
ToList().IndexOf(100)));
190 if (list.Count == 0) {
191 Assert.That(() => arg.
ToQuery().Last(), Throws.InvalidOperationException);
193 Assert.That(arg.
ToQuery().Last(), Is.EqualTo(
197 Assert.That(arg.
ToQuery().LastOrDefault(), Is.EqualTo(
198 arg.
ToList().LastOrDefault()));
203 if (arg.
ToList().Count == 0) {
204 Assert.Ignore(
"Ignore empty queries for max tests.");
208 Assert.That(arg.
ToQuery().Max(), Is.EqualTo(
214 if (arg.
ToList().Count == 0) {
215 Assert.Ignore(
"Ignore empty queries for min tests.");
219 Assert.That(arg.
ToQuery().Min(), Is.EqualTo(
229 Assert.That(() => q.FirstOrDefault(), Throws.InvalidOperationException);
234 List<int> a =
new List<int>();
235 List<int> b =
new List<int>();
238 foreach (var item
in q) {
243 foreach (var item
in q) {
246 }, Throws.InvalidOperationException);
251 object[] objs =
new object[] { 0, 0.4f,
"Hello", 7u, 0.4,
"World",
null };
253 Assert.That(objs.OfType<
string>().ToList(), Is.EquivalentTo(
254 objs.Query().OfType<
string>().ToList()));
256 Assert.That(objs.OfType<
string>(), Is.EquivalentTo(
257 objs.Query().OfType(typeof(
string)).Cast<string>().ToList()));
262 Assert.That(arg.
ToQuery().OrderBy(i => i).ToList(), Is.EquivalentTo(
263 arg.
ToList().OrderBy(i => i).ToList()));
268 Assert.That(arg.
ToQuery().OrderByDescending(i => i).ToList(), Is.EquivalentTo(
269 arg.
ToList().OrderByDescending(i => i).ToList()));
274 public void RangeFromTo([Values(0, 1, 100, -1, -100)]
int startValue,
275 [Values(0, 1, 100, -1, -100)]
int endValue,
276 [Values(1, 2, 10)]
int step,
277 [Values(
true,
false)]
bool endIsExclusive) {
278 List<int> expected =
new List<int>();
279 int value = startValue;
280 int signStep = endValue > startValue ? step : -step;
281 for (
int i = 0; i < Mathf.Abs(startValue - endValue) + 1; i++) {
286 if (endIsExclusive) {
287 expected.Remove(endValue);
290 expected = expected.Where(i => i >= Mathf.Min(startValue, endValue)).
291 Where(i => i <= Mathf.Max(startValue, endValue)).
294 Assert.That(Values.Range(startValue, endValue, step, endIsExclusive).ToList(), Is.EquivalentTo(expected));
298 public void Repeat([ValueSource(
"list0")]
QueryArg arg, [Values(0, 1, 2, 3, 100)]
int repetitions) {
299 List<int> list =
new List<int>();
300 for (
int i = 0; i < repetitions; i++) {
301 list.AddRange(arg.
ToList());
304 Assert.That(arg.
ToQuery().Repeat(repetitions).ToList(), Is.EquivalentTo(
310 var expected = arg.
ToList();
313 Assert.That(arg.
ToQuery().Reverse().ToList(), Is.EquivalentTo(
319 Assert.That(arg.
ToQuery().Select(i => i * 23).ToList(), Is.EquivalentTo(
320 arg.
ToList().Select(i => i * 23).ToList()));
325 Assert.That(arg0.
ToQuery().SelectMany(i => arg1.
ToQuery().Select(j => j * i)).ToList(), Is.EquivalentTo(
326 arg0.
ToList().SelectMany(i => arg1.
ToList().Select(j => j * i)).ToList()));
328 Assert.That(arg0.
ToQuery().SelectMany(i => arg1.
ToList().Select(j => j * i).ToList()).ToList(), Is.EquivalentTo(
329 arg0.
ToList().SelectMany(i => arg1.
ToList().Select(j => j * i)).ToList()));
334 new int[] { }.Query().SelectMany(i =>
new int[] { }.Query()).ToList();
339 var array =
new int[] { 5 };
340 Assert.That(array.Single(), Is.EqualTo(array.Query().Single()));
343 new int[] { }.Query().Single();
344 }, Throws.InvalidOperationException);
347 new int[] { 0, 1 }.Query().Single();
348 }, Throws.InvalidOperationException);
353 Assert.That(arg.
ToQuery().Skip(3).ToList(), Is.EquivalentTo(
354 arg.
ToList().Skip(3).ToList()));
359 Assert.That(arg.
ToQuery().SkipWhile(i => i < 4).ToList(), Is.EquivalentTo(
360 arg.
ToList().SkipWhile(i => i < 4).ToList()));
365 var expected = arg.
ToList();
368 Assert.That(arg.
ToQuery().Sort().ToList(), Is.EquivalentTo(
374 var expected = arg.
ToList();
378 Assert.That(arg.
ToQuery().SortDescending().ToList(), Is.EquivalentTo(
384 if (arg.
ToList().Count == 0) {
385 Assert.Ignore(
"Ignore empty queries for sum tests.");
389 Assert.That(arg.
ToQuery().Sum(), Is.EqualTo(
395 Assert.That(arg.
ToQuery().Take(4).ToList(), Is.EquivalentTo(
396 arg.
ToList().Take(4).ToList()));
401 Assert.That(arg.
ToQuery().TakeWhile(i => i < 4).ToList(), Is.EquivalentTo(
402 arg.
ToList().TakeWhile(i => i < 4).ToList()));
408 if (list.Count == 0) {
409 Assert.That(arg.
ToQuery().WithPrevious().Count(), Is.EqualTo(0));
410 Assert.That(arg.
ToQuery().WithPrevious(includeStart:
true).Count(), Is.EqualTo(0));
411 }
else if (list.Count == 1) {
412 Assert.That(arg.
ToQuery().WithPrevious().Count(), Is.EqualTo(0));
413 Assert.That(arg.
ToQuery().WithPrevious(includeStart:
true).Count(), Is.EqualTo(1));
415 Assert.That(arg.
ToQuery().WithPrevious().Count(p => p.hasPrev), Is.EqualTo(list.Count - 1));
416 Assert.That(arg.
ToQuery().WithPrevious(includeStart:
true).Count(p => !p.hasPrev), Is.EqualTo(1));
417 Assert.That(arg.
ToQuery().WithPrevious(includeStart:
true).Count(p => p.hasPrev), Is.EqualTo(list.Count - 1));
421 foreach (var pair
in arg.
ToQuery().WithPrevious()) {
422 Assert.That(pair.prev, Is.EqualTo(list[index]));
430 if (list.Count == 0) {
431 Assert.That(arg.
ToQuery().WithPrevious(offset: 4).Count(), Is.EqualTo(0));
432 Assert.That(arg.
ToQuery().WithPrevious(offset: 4, includeStart:
true).Count(), Is.EqualTo(0));
433 }
else if (list.Count == 1) {
434 Assert.That(arg.
ToQuery().WithPrevious(offset: 4).Count(), Is.EqualTo(0));
435 Assert.That(arg.
ToQuery().WithPrevious(offset: 4, includeStart:
true).Count(), Is.EqualTo(1));
437 Assert.That(arg.
ToQuery().WithPrevious(offset: 4).Count(), Is.EqualTo(Mathf.Max(0, list.Count - 4)));
438 Assert.That(arg.
ToQuery().WithPrevious(offset: list.Count + 1).Count(), Is.EqualTo(0));
439 Assert.That(arg.
ToQuery().WithPrevious(offset:
int.MaxValue).Count(), Is.EqualTo(0));
442 Assert.That(Values.Range(0, 10).WithPrevious(offset: 2).All(i => i.value - i.prev == 2));
447 Assert.That(arg.
ToQuery().Where(i => i % 2 == 0).ToList(), Is.EquivalentTo(
448 arg.
ToList().Where(i => i % 2 == 0).ToList()));
454 foreach (var item
in arg.
ToQuery().WithIndices()) {
455 Assert.That(item.index, Is.EqualTo(index));
456 Assert.That(item.value, Is.EqualTo(arg.
ToList()[index]));
463 var list0 = arg0.
ToList();
464 var list1 = arg1.
ToList();
466 List<string> expected =
new List<string>();
467 for (
int i = 0; i < Mathf.Min(list0.Count, list1.Count); i++) {
468 expected.Add(list0[i].ToString() + list1[i].ToString());
471 Assert.That(arg0.
ToQuery().Zip(arg1.
ToQuery(), (a, b) => a.ToString() + b.ToString()).ToList(), Is.EquivalentTo(
474 Assert.That(arg0.
ToQuery().Zip(arg1.
ToList(), (a, b) => a.ToString() + b.ToString()).ToList(), Is.EquivalentTo(
478 private static IEnumerable<QueryArg> list0 {
480 List<int> values =
new List<int>() { 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 9, 1, 900,
int.MinValue,
int.MaxValue };
481 List<int> lengths =
new List<int>() {
488 foreach (var length
in lengths) {
489 var list = values.Take(length).ToList();
490 yield
return new QueryArg(list, list.Count);
491 yield
return new QueryArg(list, list.Count * 10 + 10);
496 private static IEnumerable<QueryArg> list1 {
498 List<int> values =
new List<int>() { 6, 7, 8, 9, 10, 1, 1, 9, 300, 6, 900,
int.MaxValue };
499 List<int> lengths =
new List<int>() {
506 foreach (var length
in lengths) {
507 var list = values.Take(length).ToList();
508 yield
return new QueryArg(list, list.Count);
509 yield
return new QueryArg(list, list.Count * 10 + 10);
515 private int[] _array;
519 _array =
new int[capacity];
520 values.CopyTo(_array);
521 _count = values.Count;
525 int[] copy =
new int[_array.Length];
526 _array.CopyTo(copy, 0);
531 return new List<int>(_array.Take(_count));
535 return _array.Length +
" : " + Utils.ToArrayString(_array.Take(_count));
541 private int _curr = -1;
551 return (_curr != 10);
554 object IEnumerator.Current {
get {
return null; } }
override string ToString()
QueryArg(List< int > values, int capacity)
void FirstTests([ValueSource("list0")] QueryArg arg)
void SkipWhileTest([ValueSource("list0")] QueryArg arg)
void AllTest([ValueSource("list0")] QueryArg arg)
void MultiFirstTest([ValueSource("list0")] QueryArg arg)
void FirstOrDefaultTests([ValueSource("list0")] QueryArg arg)
void OrderByDescendingTest([ValueSource("list0")] QueryArg arg)
void SortDescendingTests([ValueSource("list0")] QueryArg arg)
void SelectManyEmptyTest()
void ContainsTest([ValueSource("list0")] QueryArg arg)
void ZipTest([ValueSource("list0")] QueryArg arg0, [ValueSource("list1")] QueryArg arg1)
void MinTest([ValueSource("list0")] QueryArg arg)
void ForeachTest([ValueSource("list0")] QueryArg arg0, [ValueSource("list1")] QueryArg arg1)
void WithPreviousTest([ValueSource("list0")] QueryArg arg)
void IndexOfTests([ValueSource("list0")] QueryArg arg)
void WithIndicesTest([ValueSource("list0")] QueryArg arg)
void OrderByTest([ValueSource("list0")] QueryArg arg)
void DistinctTest([ValueSource("list0")] QueryArg arg)
void AverageTest([ValueSource("list0")] QueryArg arg0)
void ReverseTest([ValueSource("list0")] QueryArg arg)
void WithPreviousOffsetTest([ValueSource("list0")] QueryArg arg)
void SkipTest([ValueSource("list0")] QueryArg arg)
void TakeWhileTest([ValueSource("list0")] QueryArg arg)
void MultiForeachTest([ValueSource("list0")] QueryArg arg)
void WhereTest([ValueSource("list0")] QueryArg arg)
void LastTests([ValueSource("list0")] QueryArg arg)
void FoldTest([ValueSource("list0")] QueryArg arg)
void SortTest([ValueSource("list0")] QueryArg arg)
void ConcatTest([ValueSource("list0")] QueryArg arg0, [ValueSource("list0")] QueryArg arg1)
void AnyTest([ValueSource("list0")] QueryArg arg)
void SelectManyTest([ValueSource("list0")] QueryArg arg0, [ValueSource("list0")] QueryArg arg1)
void SumTests([ValueSource("list0")] QueryArg arg)
void SelectTest([ValueSource("list0")] QueryArg arg)
void ElementAtTest([ValueSource("list0")] QueryArg arg, [Values(0, 3, 100)] int index)
void Repeat([ValueSource("list0")] QueryArg arg, [Values(0, 1, 2, 3, 100)] int repetitions)
void RangeFromTo([Values(0, 1, 100, -1, -100)] int startValue, [Values(0, 1, 100, -1, -100)] int endValue, [Values(1, 2, 10)] int step, [Values(true, false)] bool endIsExclusive)
void CountTests([ValueSource("list0")] QueryArg arg)
void MaxTest([ValueSource("list0")] QueryArg arg)
void TakeTest([ValueSource("list0")] QueryArg arg)
A Query object is a type of immutable ordered collection of elements that can be used to perform usef...