示例#1
0
        public void Nouns()
        {
            int speechPartNountID            = 1;
            CyrNounCollection nounCollection = new CyrNounCollection();
            CyrillerEntities  mainDB         = new CyrillerEntities();
            int         count = mainDB.Words.Where(x => x.SpeechPartID == speechPartNountID).Count();
            int         step  = 1000;
            List <Task> tasks = new List <Task>();

            mainDB.Dispose();

            for (int i = 0; i < count; i += step)
            {
                int skip = i;

                tasks.Add(Task.Run(() =>
                {
                    CyrillerEntities db     = new CyrillerEntities();
                    IQueryable <Word> words = db.Words.Where(x => x.SpeechPartID == speechPartNountID).OrderBy(x => x.ID).Skip(skip).Take(step);

                    foreach (Word word in words)
                    {
                        CyrNoun noun = nounCollection.Get(word.Name, GetConditionsEnum.Strict, (GendersEnum?)word.GenderID, (AnimatesEnum?)word.AnimateID, (WordTypesEnum?)word.TypeID);

                        Assert.NotNull(noun);
                        Assert.Equal(word.GenderID ?? 0, (int?)noun.Gender ?? 0);
                        Assert.Equal(word.AnimateID ?? 0, (int?)noun.Animate ?? 0);
                        Assert.Equal(word.TypeID ?? 0, (int?)noun.WordType ?? 0);

                        CyrResult result = noun.Decline();

                        Assert.NotNull(result);

                        for (int caseID = 1; caseID < 7; caseID++)
                        {
                            WordCase[] wordCases = word.WordCases.Where(x => x.CaseID == caseID && x.NumberID == 1).ToArray();

                            if (!wordCases.Any())
                            {
                                Assert.True(caseID == 1 || string.IsNullOrEmpty(result[caseID]), $"{word.ID}|{caseID} - {word.Name} - {result[caseID]}");
                            }
                            else
                            {
                                Assert.True(wordCases.Any(x => string.Compare(x.Name, result[caseID], true) == 0), $"{word.ID}|{caseID} - {word.Name} - {result[caseID]}");
                            }
                        }
                    }

                    db.Dispose();
                }));
            }

            Task.WaitAll(tasks.ToArray());
        }
示例#2
0
        public void Nouns()
        {
            int speechPartNountID            = 1;
            CyrNounCollection nounCollection = new CyrNounCollection();
            CyrillerEntities  mainDB         = new CyrillerEntities();
            int         count = mainDB.Words.Where(x => x.SpeechPartID == speechPartNountID).Count();
            int         step  = 1000;
            List <Task> tasks = new List <Task>();

            mainDB.Dispose();

            for (int i = 0; i < count; i += step)
            {
                int skip = i;

                tasks.Add(Task.Run(() =>
                {
                    CyrillerEntities db     = new CyrillerEntities();
                    IQueryable <Word> words = db.Words.Where(x => x.SpeechPartID == speechPartNountID).OrderBy(x => x.ID).Skip(skip).Take(step);

                    foreach (Word iterator in words)
                    {
                        CyrNoun noun = nounCollection.Get(iterator.Name, (GendersEnum)(iterator.GenderID ?? 0), CasesEnum.Nominative, NumbersEnum.Singular);

                        Assert.NotNull(noun);

                        // There might be multiple the same words in the database, one animated, another one not.
                        int animateID = (int)noun.Animate;
                        int genderID  = (int)noun.Gender;
                        Word word     = db.Words.FirstOrDefault(x =>
                                                                x.Name == noun.Name &&
                                                                x.AnimateID == animateID &&
                                                                (x.GenderID ?? 0) == genderID
                                                                );

                        Assert.NotNull(word);
                        Assert.True((word.GenderID ?? 0) == ((int?)noun.Gender ?? 0), $"{word.ID}|{word.Name} - wrong gender [{noun.Gender}], expected [{word.Gender?.Name}].");
                        Assert.True((word.AnimateID ?? 0) == ((int?)noun.Animate ?? 0), $"{word.ID}|{word.Name} - wrong animate [{noun.Animate}], expected [{word.Animate?.Name}].");
                        Assert.True((word.TypeID ?? 0) == ((int?)noun.WordType ?? 0), $"{word.ID}|{word.Name} - wrong type [{noun.WordType}], expected [{word.WordType?.Name}].");

                        CyrResult result = noun.Decline();

                        Assert.NotNull(result);

                        for (int caseID = 1; caseID < 7; caseID++)
                        {
                            WordCase[] wordCases = word.WordCases.Where(x => x.CaseID == caseID && x.NumberID == 1).ToArray();
                            string errorMessage  = $"{word.ID}|{caseID} - wrong case [{result[caseID]}], expected [{word.Name}].";

                            if (!wordCases.Any())
                            {
                                Assert.True(caseID == 1 || string.IsNullOrEmpty(result[caseID]), errorMessage);
                            }
                            else
                            {
                                Assert.True(wordCases.Any(x => string.Compare(x.Name, result[caseID], true) == 0), errorMessage);
                            }
                        }
                    }

                    db.Dispose();
                }));
            }

            Task.WaitAll(tasks.ToArray());
        }