Skip to content

Commit ad1eb4d

Browse files
committed
More tests of Contains
1 parent c79dbe0 commit ad1eb4d

1 file changed

Lines changed: 167 additions & 0 deletions

File tree

Orm/Xtensive.Orm.Tests/Linq/MemoryExtensionsTest.cs

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ namespace Xtensive.Orm.Tests.Linq
1313
[TestFixture(Description = "Test cases when System.MemoryExtensions are applied instead of more general versions of methods from EnumerableExtensions")]
1414
public class MemoryExtensionsTest : ChinookDOModelTest
1515
{
16+
private readonly int unknownTracksCount = 0;
17+
private readonly int audioTracksCount = 3289;
18+
private readonly int videoTracksCount = 214;
19+
1620
private int[] existingGenreIds;
1721
private string[] existingGenreNames;
1822

@@ -390,6 +394,169 @@ public void StringArrayContainsInSingleOrDefaultTest2()
390394
}
391395

392396
#endregion
397+
398+
399+
#region Contains over ReadOnlySpan<T> where T is not IComparable, like enums
400+
401+
[Test]
402+
public void EnumArrayContainsInAllTest()
403+
{
404+
var formats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Audio };
405+
var allFormats = (MediaFormat[]) Enum.GetValues(typeof(MediaFormat));
406+
407+
var query = Session.Query.All<IntermediateTrack>()
408+
.All(t => formats.Contains(t.MediaFormat));
409+
Assert.That(query, Is.False);
410+
411+
query = Session.Query.All<IntermediateTrack>()
412+
.All(t => allFormats.Contains(t.MediaFormat));
413+
Assert.That(query, Is.True);
414+
}
415+
416+
[Test]
417+
public void EnumArrayContainsInAnyTest()
418+
{
419+
var formats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Audio };
420+
var allFormats = (MediaFormat[]) Enum.GetValues(typeof(MediaFormat));
421+
422+
var query = Session.Query.All<IntermediateTrack>()
423+
.Any(t => formats.Contains(t.MediaFormat));
424+
Assert.That(query, Is.True);
425+
426+
var inexistentFormats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Video };
427+
query = Session.Query.All<AudioTrack>().Any(t => inexistentFormats.Contains(t.MediaFormat));
428+
Assert.That(query, Is.False);
429+
}
430+
431+
[Test]
432+
public void EnumArrayContainsInCountTest()
433+
{
434+
var formats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Audio };
435+
var allFormats = (MediaFormat[]) Enum.GetValues(typeof(MediaFormat));
436+
437+
var query = Session.Query.All<IntermediateTrack>()
438+
.Count(t => formats.Contains(t.MediaFormat));
439+
Assert.That(query, Is.EqualTo(unknownTracksCount + audioTracksCount));
440+
441+
var inexistentFormats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Video };
442+
query = Session.Query.All<AudioTrack>()
443+
.Count(t => inexistentFormats.Contains(t.MediaFormat));
444+
Assert.That(query, Is.EqualTo(0));
445+
}
446+
447+
[Test]
448+
public void EnumArrayContainsInGroupByTest()
449+
{
450+
var formats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Audio };
451+
var allFormats = (MediaFormat[]) Enum.GetValues(typeof(MediaFormat));
452+
453+
var query = Session.Query.All<IntermediateTrack>()
454+
.GroupBy(t => formats.Contains(t.MediaFormat)).ToArray();
455+
Assert.That(query.Length, Is.EqualTo(2));
456+
var firstGroup = query[0];
457+
Assert.That(firstGroup.Key, Is.False);
458+
Assert.That(firstGroup.Count(), Is.EqualTo(videoTracksCount));
459+
460+
var secondGroup = query[1];
461+
Assert.That(secondGroup.Key, Is.True);
462+
Assert.That(secondGroup.Count(), Is.EqualTo(unknownTracksCount + audioTracksCount));
463+
464+
var inexistentFormats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Video };
465+
query = Session.Query.All<AudioTrack>()
466+
.GroupBy(t => inexistentFormats.Contains(t.MediaFormat)).ToArray();
467+
Assert.That(query.Length, Is.EqualTo(1));
468+
firstGroup = query[0];
469+
Assert.That(firstGroup.Key, Is.False);
470+
Assert.That(firstGroup.Count(), Is.EqualTo(audioTracksCount));
471+
}
472+
473+
[Test]
474+
public void EnumArrayContainsInOrderByTest()
475+
{
476+
var formats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Audio };
477+
var allFormats = (MediaFormat[]) Enum.GetValues(typeof(MediaFormat));
478+
479+
var tracks = Session.Query.All<IntermediateTrack>()
480+
.OrderBy(t => formats.Contains(t.MediaFormat)).ToArray();
481+
482+
Assert.That(tracks.Take(videoTracksCount).All(t => !formats.Contains(t.MediaFormat)), Is.True);
483+
Assert.That(tracks.Skip(videoTracksCount).All(t => formats.Contains(t.MediaFormat)), Is.True);
484+
485+
var inexistentFormats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Video };
486+
tracks = Session.Query.All<AudioTrack>()
487+
.OrderBy(t => inexistentFormats.Contains(t.MediaFormat)).ToArray();
488+
Assert.That(tracks.All(t => !inexistentFormats.Contains(t.MediaFormat)), Is.True);
489+
}
490+
491+
[Test]
492+
public void EnumArrayContainsInSelectTest()
493+
{
494+
var formats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Audio };
495+
var allFormats = (MediaFormat[]) Enum.GetValues(typeof(MediaFormat));
496+
497+
var queryResult = Session.Query.All<IntermediateTrack>()
498+
.Select(t => formats.Contains(t.MediaFormat)).ToArray();
499+
Assert.That(queryResult.Length, Is.EqualTo(unknownTracksCount + audioTracksCount + videoTracksCount));
500+
Assert.That(queryResult.Count(b => b == true), Is.EqualTo(unknownTracksCount + audioTracksCount));
501+
502+
var inexistentFormats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Video };
503+
queryResult = Session.Query.All<AudioTrack>()
504+
.Select(t => inexistentFormats.Contains(t.MediaFormat)).ToArray();
505+
Assert.That(queryResult.Length, Is.EqualTo(audioTracksCount));
506+
Assert.That(queryResult.Count(b => b == true), Is.EqualTo(0));
507+
}
508+
509+
[Test]
510+
public void EnumArrayContainsInWhereTest()
511+
{
512+
var formats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Audio };
513+
var allFormats = (MediaFormat[]) Enum.GetValues(typeof(MediaFormat));
514+
515+
var tracks = Session.Query.All<IntermediateTrack>()
516+
.Where(t => formats.Contains(t.MediaFormat)).ToArray();
517+
518+
Assert.That(tracks.Length, Is.EqualTo(unknownTracksCount + audioTracksCount));
519+
Assert.That(tracks.All(t => formats.Contains(t.MediaFormat)));
520+
521+
522+
var inexistentFormats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Video };
523+
tracks = Session.Query.All<AudioTrack>()
524+
.Where(t => inexistentFormats.Contains(t.MediaFormat)).ToArray();
525+
526+
Assert.That(tracks.Length, Is.EqualTo(0));
527+
Assert.That(tracks.All(t => !formats.Contains(t.MediaFormat)));
528+
}
529+
530+
[Test]
531+
public void EnumArrayContainsInFirstTest()
532+
{
533+
var formats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Audio };
534+
var allFormats = (MediaFormat[]) Enum.GetValues(typeof(MediaFormat));
535+
536+
var track = Session.Query.All<IntermediateTrack>()
537+
.First(t => formats.Contains(t.MediaFormat));
538+
539+
Assert.That(formats.Contains(track.MediaFormat), Is.True);
540+
}
541+
542+
[Test]
543+
public void EnumArrayContainsInFirstOrDefaultTest()
544+
{
545+
var formats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Audio };
546+
547+
var track = Session.Query.All<IntermediateTrack>()
548+
.FirstOrDefault(t => formats.Contains(t.MediaFormat));
549+
550+
Assert.That(track, Is.Not.Null);
551+
Assert.That(formats.Contains(track.MediaFormat), Is.True);
552+
553+
var inexistentFormats = new MediaFormat[] { MediaFormat.Unknown, MediaFormat.Video };
554+
track = Session.Query.All<AudioTrack>()
555+
.FirstOrDefault(t => inexistentFormats.Contains(t.MediaFormat));
556+
Assert.That(track, Is.Null);
557+
}
558+
559+
#endregion
393560
}
394561
}
395562
#endif

0 commit comments

Comments
 (0)