Exemplo n.º 1
0
        public void FindCommand()
        {
            DispatcherHelper.Initialize();
            var segmentPool     = new SegmentPool();
            var projectService  = Substitute.For <IProjectService>();
            var dialogService   = Substitute.For <IDialogService>();
            var busyService     = Substitute.For <IBusyService>();
            var exportService   = Substitute.For <IExportService>();
            var analysisService = new AnalysisService(_spanFactory, segmentPool, projectService, dialogService, busyService);

            WordPairsViewModel.Factory   wordPairsFactory   = () => new WordPairsViewModel(busyService);
            VarietyPairViewModel.Factory varietyPairFactory = (vp, order) => new VarietyPairViewModel(segmentPool, projectService, wordPairsFactory, vp, order);

            var varietyPairs = new VarietyPairsViewModel(projectService, busyService, dialogService, exportService, analysisService, varietyPairFactory);

            CogProject project = TestHelpers.GetTestProject(_spanFactory, segmentPool);

            project.Meanings.AddRange(new[] { new Meaning("gloss1", "cat1"), new Meaning("gloss2", "cat2"), new Meaning("gloss3", "cat3") });
            project.Varieties.AddRange(new[] { new Variety("variety1"), new Variety("variety2"), new Variety("variety3") });
            project.Varieties[0].Words.AddRange(new[] { new Word("hɛ.loʊ", project.Meanings[0]), new Word("gʊd", project.Meanings[1]), new Word("bæd", project.Meanings[2]) });
            project.Varieties[1].Words.AddRange(new[] { new Word("hɛlp", project.Meanings[0]), new Word("gu.gəl", project.Meanings[1]), new Word("gu.fi", project.Meanings[2]) });
            project.Varieties[2].Words.AddRange(new[] { new Word("wɜrd", project.Meanings[0]), new Word("kɑr", project.Meanings[1]), new Word("fʊt.bɔl", project.Meanings[2]) });
            projectService.Project.Returns(project);
            analysisService.SegmentAll();
            var varietyPairGenerator = new VarietyPairGenerator();

            varietyPairGenerator.Process(project);
            var wordPairGenerator = new SimpleWordPairGenerator(segmentPool, project, 0.3, ComponentIdentifiers.PrimaryWordAligner);

            foreach (VarietyPair vp in project.VarietyPairs)
            {
                wordPairGenerator.Process(vp);
                vp.SoundChangeFrequencyDistribution   = new ConditionalFrequencyDistribution <SoundContext, Ngram <Segment> >();
                vp.SoundChangeProbabilityDistribution = new ConditionalProbabilityDistribution <SoundContext, Ngram <Segment> >(vp.SoundChangeFrequencyDistribution, (sc, fd) => new MaxLikelihoodProbabilityDistribution <Ngram <Segment> >(fd));
            }

            int i = 0;

            foreach (WordPair wp in project.VarietyPairs[0].WordPairs)
            {
                wp.PhoneticSimilarityScore = (1.0 / project.VarietyPairs[0].WordPairs.Count) * (project.VarietyPairs[0].WordPairs.Count - i);
                wp.AreCognatePredicted     = wp.Meaning.Gloss.IsOneOf("gloss1", "gloss3");
                i++;
            }

            i = 0;
            foreach (WordPair wp in project.VarietyPairs[1].WordPairs)
            {
                wp.PhoneticSimilarityScore = (1.0 / project.VarietyPairs[1].WordPairs.Count) * (project.VarietyPairs[1].WordPairs.Count - i);
                i++;
            }

            projectService.ProjectOpened += Raise.Event();

            varietyPairs.VarietiesView1 = new ListCollectionView(varietyPairs.Varieties);
            varietyPairs.VarietiesView2 = new ListCollectionView(varietyPairs.Varieties);

            WordPairsViewModel cognates = varietyPairs.SelectedVarietyPair.Cognates;

            cognates.WordPairsView = new ListCollectionView(cognates.WordPairs);
            WordPairViewModel[] cognatesArray = cognates.WordPairsView.Cast <WordPairViewModel>().ToArray();
            WordPairsViewModel  noncognates   = varietyPairs.SelectedVarietyPair.Noncognates;

            noncognates.WordPairsView = new ListCollectionView(noncognates.WordPairs);
            WordPairViewModel[] noncognatesArray = noncognates.WordPairsView.Cast <WordPairViewModel>().ToArray();

            FindViewModel findViewModel = null;
            Action        closeCallback = null;

            dialogService.ShowModelessDialog(varietyPairs, Arg.Do <FindViewModel>(vm => findViewModel = vm), Arg.Do <Action>(callback => closeCallback = callback));
            varietyPairs.FindCommand.Execute(null);
            Assert.That(findViewModel, Is.Not.Null);
            Assert.That(closeCallback, Is.Not.Null);

            // already open, shouldn't get opened twice
            dialogService.ClearReceivedCalls();
            varietyPairs.FindCommand.Execute(null);
            dialogService.DidNotReceive().ShowModelessDialog(varietyPairs, Arg.Any <FindViewModel>(), Arg.Any <Action>());

            // form searches
            findViewModel.Field = FindField.Form;

            // nothing selected, no match
            findViewModel.String = "nothing";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.Empty);

            // nothing selected, matches
            findViewModel.String = "g";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.EquivalentTo(cognatesArray[1].ToEnumerable()));
            Assert.That(noncognates.SelectedWordPairs, Is.Empty);
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[0].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[0].ToEnumerable()));

            // first word selected, matches
            noncognates.SelectedWordPairs.Clear();
            cognates.SelectedWordPairs.Add(cognatesArray[0]);
            findViewModel.String = "ʊ";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[0].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.EquivalentTo(cognatesArray[0].ToEnumerable()));
            Assert.That(noncognates.SelectedWordPairs, Is.Empty);
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.EquivalentTo(cognatesArray[0].ToEnumerable()));
            Assert.That(noncognates.SelectedWordPairs, Is.Empty);
            // start over
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[0].ToEnumerable()));

            // last word selected, matches
            cognates.SelectedWordPairs.Clear();
            noncognates.SelectedWordPairs.Add(noncognatesArray[0]);
            findViewModel.String = "h";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.EquivalentTo(cognatesArray[0].ToEnumerable()));
            Assert.That(noncognates.SelectedWordPairs, Is.Empty);
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.EquivalentTo(cognatesArray[0].ToEnumerable()));
            Assert.That(noncognates.SelectedWordPairs, Is.Empty);

            // switch variety pair, nothing selected, no cognates, matches, change selected word
            varietyPairs.SelectedVariety2 = varietyPairs.Varieties[2];
            cognates = varietyPairs.SelectedVarietyPair.Cognates;
            cognates.WordPairsView    = new ListCollectionView(cognates.WordPairs);
            noncognates               = varietyPairs.SelectedVarietyPair.Noncognates;
            noncognates.WordPairsView = new ListCollectionView(noncognates.WordPairs);
            noncognatesArray          = noncognates.WordPairsView.Cast <WordPairViewModel>().ToArray();

            findViewModel.String = "l";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[0].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[2].ToEnumerable()));
            noncognates.SelectedWordPairs.Clear();
            noncognates.SelectedWordPairs.Add(noncognatesArray[1]);
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[2].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[0].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[0].ToEnumerable()));

            // gloss searches
            findViewModel.Field  = FindField.Gloss;
            findViewModel.String = "gloss2";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[1].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(cognates.SelectedWordPairs, Is.Empty);
            Assert.That(noncognates.SelectedWordPairs, Is.EquivalentTo(noncognatesArray[1].ToEnumerable()));
        }
Exemplo n.º 2
0
        public void TaskAreas()
        {
            DispatcherHelper.Initialize();
            var segmentPool     = new SegmentPool();
            var projectService  = Substitute.For <IProjectService>();
            var dialogService   = Substitute.For <IDialogService>();
            var busyService     = Substitute.For <IBusyService>();
            var exportService   = Substitute.For <IExportService>();
            var analysisService = new AnalysisService(_spanFactory, segmentPool, projectService, dialogService, busyService);

            WordPairsViewModel.Factory   wordPairsFactory   = () => new WordPairsViewModel(busyService);
            VarietyPairViewModel.Factory varietyPairFactory = (vp, order) => new VarietyPairViewModel(segmentPool, projectService, wordPairsFactory, vp, order);

            var varietyPairs = new VarietyPairsViewModel(projectService, busyService, dialogService, exportService, analysisService, varietyPairFactory);

            CogProject project = TestHelpers.GetTestProject(_spanFactory, segmentPool);

            project.Meanings.AddRange(new[] { new Meaning("gloss1", "cat1"), new Meaning("gloss2", "cat2"), new Meaning("gloss3", "cat3"), new Meaning("gloss4", "cat4") });
            project.Varieties.AddRange(new[] { new Variety("variety1"), new Variety("variety2"), new Variety("variety3") });
            project.Varieties[0].Words.AddRange(new[] { new Word("hɛ.loʊ", project.Meanings[0]), new Word("gʊd", project.Meanings[1]), new Word("bæd", project.Meanings[2]), new Word("wɜrd", project.Meanings[3]) });
            project.Varieties[1].Words.AddRange(new[] { new Word("hɛlp", project.Meanings[0]), new Word("gu.gəl", project.Meanings[1]), new Word("gu.fi", project.Meanings[2]), new Word("kɑr", project.Meanings[3]) });
            projectService.Project.Returns(project);
            analysisService.SegmentAll();
            var varietyPairGenerator = new VarietyPairGenerator();

            varietyPairGenerator.Process(project);
            var wordPairGenerator = new SimpleWordPairGenerator(segmentPool, project, 0.3, ComponentIdentifiers.PrimaryWordAligner);

            foreach (VarietyPair vp in project.VarietyPairs)
            {
                wordPairGenerator.Process(vp);
                vp.SoundChangeFrequencyDistribution   = new ConditionalFrequencyDistribution <SoundContext, Ngram <Segment> >();
                vp.SoundChangeProbabilityDistribution = new ConditionalProbabilityDistribution <SoundContext, Ngram <Segment> >(vp.SoundChangeFrequencyDistribution, (sc, fd) => new MaxLikelihoodProbabilityDistribution <Ngram <Segment> >(fd));
            }

            int i = 0;

            foreach (WordPair wp in project.VarietyPairs[0].WordPairs)
            {
                wp.PhoneticSimilarityScore = (1.0 / project.VarietyPairs[0].WordPairs.Count) * (i + 1);
                wp.AreCognatePredicted     = wp.Meaning.Gloss.IsOneOf("gloss1", "gloss3");
                i++;
            }

            projectService.ProjectOpened += Raise.Event();

            varietyPairs.VarietiesView1 = new ListCollectionView(varietyPairs.Varieties);
            varietyPairs.VarietiesView2 = new ListCollectionView(varietyPairs.Varieties);

            WordPairsViewModel cognates = varietyPairs.SelectedVarietyPair.Cognates;

            cognates.WordPairsView = new ListCollectionView(cognates.WordPairs);
            WordPairViewModel[] cognatesArray = cognates.WordPairsView.Cast <WordPairViewModel>().ToArray();
            WordPairsViewModel  noncognates   = varietyPairs.SelectedVarietyPair.Noncognates;

            noncognates.WordPairsView = new ListCollectionView(noncognates.WordPairs);
            WordPairViewModel[] noncognatesArray = noncognates.WordPairsView.Cast <WordPairViewModel>().ToArray();

            Assert.That(cognatesArray.Select(wp => wp.Meaning.Gloss), Is.EqualTo(new[] { "gloss3", "gloss1" }));
            Assert.That(noncognatesArray.Select(wp => wp.Meaning.Gloss), Is.EqualTo(new[] { "gloss4", "gloss2" }));

            var commonTasks      = (TaskAreaItemsViewModel)varietyPairs.TaskAreas[0];
            var sortWordsByItems = (TaskAreaItemsViewModel)commonTasks.Items[2];
            var sortWordsByGroup = (TaskAreaCommandGroupViewModel)sortWordsByItems.Items[0];

            // default sorting is by similarity, change to gloss
            sortWordsByGroup.SelectedCommand = sortWordsByGroup.Commands[1];
            sortWordsByGroup.SelectedCommand.Command.Execute(null);
            cognatesArray    = cognates.WordPairsView.Cast <WordPairViewModel>().ToArray();
            noncognatesArray = noncognates.WordPairsView.Cast <WordPairViewModel>().ToArray();
            Assert.That(cognatesArray.Select(wp => wp.Meaning.Gloss), Is.EqualTo(new[] { "gloss1", "gloss3" }));
            Assert.That(noncognatesArray.Select(wp => wp.Meaning.Gloss), Is.EqualTo(new[] { "gloss2", "gloss4" }));
        }
        public void FindCommand()
        {
            DispatcherHelper.Initialize();
            var segmentPool        = new SegmentPool();
            var projectService     = Substitute.For <IProjectService>();
            var dialogService      = Substitute.For <IDialogService>();
            var busyService        = Substitute.For <IBusyService>();
            var graphService       = new GraphService(projectService);
            var imageExportService = Substitute.For <IImageExportService>();
            var analysisService    = new AnalysisService(_spanFactory, segmentPool, projectService, dialogService, busyService);

            WordPairsViewModel.Factory wordPairsFactory = () => new WordPairsViewModel(busyService);
            WordPairViewModel.Factory  wordPairFactory  = (pair, order) => new WordPairViewModel(projectService, analysisService, pair, order);
            var globalCorrespondences = new GlobalCorrespondencesViewModel(projectService, busyService, dialogService, imageExportService, graphService, wordPairsFactory, wordPairFactory);

            CogProject project = TestHelpers.GetTestProject(_spanFactory, segmentPool);

            project.Meanings.AddRange(new[] { new Meaning("gloss1", "cat1"), new Meaning("gloss2", "cat2"), new Meaning("gloss3", "cat3") });
            project.Varieties.AddRange(new[] { new Variety("variety1"), new Variety("variety2"), new Variety("variety3") });
            project.Varieties[0].Words.AddRange(new[] { new Word("hɛ.loʊ", project.Meanings[0]), new Word("gʊd", project.Meanings[1]), new Word("kæd", project.Meanings[2]) });
            project.Varieties[1].Words.AddRange(new[] { new Word("hɛlp", project.Meanings[0]), new Word("gu.gəl", project.Meanings[1]), new Word("gu.fi", project.Meanings[2]) });
            project.Varieties[2].Words.AddRange(new[] { new Word("wɜrd", project.Meanings[0]), new Word("kɑr", project.Meanings[1]), new Word("fʊt.bɔl", project.Meanings[2]) });
            projectService.Project.Returns(project);
            analysisService.SegmentAll();

            var varietyPairGenerator = new VarietyPairGenerator();

            varietyPairGenerator.Process(project);
            var wordPairGenerator    = new SimpleWordPairGenerator(segmentPool, project, 0.3, ComponentIdentifiers.PrimaryWordAligner);
            var globalCorrIdentifier = new SoundCorrespondenceIdentifier(segmentPool, project, ComponentIdentifiers.PrimaryWordAligner);

            foreach (VarietyPair vp in project.VarietyPairs)
            {
                wordPairGenerator.Process(vp);
                foreach (WordPair wp in vp.WordPairs)
                {
                    wp.PredictedCognacy = true;
                }
                vp.CognateSoundCorrespondenceFrequencyDistribution   = new ConditionalFrequencyDistribution <SoundContext, Ngram <Segment> >();
                vp.CognateSoundCorrespondenceProbabilityDistribution = new ConditionalProbabilityDistribution <SoundContext, Ngram <Segment> >(vp.CognateSoundCorrespondenceFrequencyDistribution, (sc, fd) => new MaxLikelihoodProbabilityDistribution <Ngram <Segment> >(fd));
                globalCorrIdentifier.Process(vp);
            }
            projectService.AreAllVarietiesCompared.Returns(true);
            projectService.ProjectOpened += Raise.Event();

            WordPairsViewModel observedWordPairs = globalCorrespondences.ObservedWordPairs;

            observedWordPairs.WordPairsView = new ListCollectionView(observedWordPairs.WordPairs);

            FindViewModel findViewModel = null;
            Action        closeCallback = null;

            dialogService.ShowModelessDialog(globalCorrespondences, Arg.Do <FindViewModel>(vm => findViewModel = vm), Arg.Do <Action>(callback => closeCallback = callback));
            globalCorrespondences.FindCommand.Execute(null);
            Assert.That(findViewModel, Is.Not.Null);
            Assert.That(closeCallback, Is.Not.Null);

            // already open, shouldn't get opened twice
            dialogService.ClearReceivedCalls();
            globalCorrespondences.FindCommand.Execute(null);
            dialogService.DidNotReceive().ShowModelessDialog(globalCorrespondences, Arg.Any <FindViewModel>(), Arg.Any <Action>());

            // form searches
            findViewModel.Field = FindField.Form;

            // no word pairs, no match
            findViewModel.String = "nothing";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.Empty);

            globalCorrespondences.SelectedCorrespondence = globalCorrespondences.Graph.Edges.First(e => e.Source.StrRep == "k" && e.Target.StrRep == "g");
            WordPairViewModel[] wordPairsArray = observedWordPairs.WordPairsView.Cast <WordPairViewModel>().ToArray();

            // nothing selected, no match
            findViewModel.String = "nothing";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.Empty);

            // nothing selected, matches
            findViewModel.String = "d";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[1].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[2].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[2].ToEnumerable()));

            // first word selected, matches
            observedWordPairs.SelectedWordPairs.Clear();
            observedWordPairs.SelectedWordPairs.Add(wordPairsArray[0]);
            findViewModel.String = "g";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[1].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[2].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[0].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[0].ToEnumerable()));
            // start search over
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[1].ToEnumerable()));

            // last word selected, matches
            observedWordPairs.SelectedWordPairs.Clear();
            observedWordPairs.SelectedWordPairs.Add(wordPairsArray[2]);
            findViewModel.String = "u";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[0].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[2].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[2].ToEnumerable()));

            // nothing selected, matches, change selected word
            observedWordPairs.SelectedWordPairs.Clear();
            findViewModel.String = ".";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[0].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[2].ToEnumerable()));
            observedWordPairs.SelectedWordPairs.Clear();
            observedWordPairs.SelectedWordPairs.Add(wordPairsArray[1]);
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[2].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[0].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[0].ToEnumerable()));

            // gloss searches
            findViewModel.Field  = FindField.Gloss;
            findViewModel.String = "gloss2";
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[1].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[0].ToEnumerable()));
            findViewModel.FindNextCommand.Execute(null);
            Assert.That(observedWordPairs.SelectedWordPairs, Is.EquivalentTo(wordPairsArray[0].ToEnumerable()));
        }