Ejemplo n.º 1
0
        public void TestWordDomain()
        {
            Конус w1 = new Конус("1");
            Конус w2 = new Конус("2");
            Конус w3 = new Конус("3");
            w1.ДобавитьВКообласть(w2);
            w1.ДобавитьВКообласть(w3);

            Assert.IsTrue(w1.Кообласть.Count == 2);    //проверка добавления двух слов в домен слова w1
            Assert.IsTrue(w2.Область["1"].Имя == "1");    //проверка кодоменов добавляемых слов
            Assert.IsTrue(w3.Область["1"].Имя == "1");

            w1.УдалитьИзКообласти(w2);
            w1.УдалитьИзКообласти(w3);

            Assert.IsTrue(w1.Кообласть.Count == 0);    //проверка удаления слова из домена w1
            Assert.IsTrue(w2.Область.Count == 0);
        }
Ejemplo n.º 2
0
 public static Конус AddLocal(Конус word)
 {
     //Пробуем вычислить морфизм как функтор
     if (Функтор.ЭтоФунктор(word))
     {
         //TODO: определить условия вычисления функтора: если он был ранее вычислен, нужно ли его вычислять заново?
         //Вероятно нужно определить функторы, которые зависят от области и кообласти - их вычислять надо всегда.
         //Остальные функторы вычислять можно один раз.
         Dictionary <string, Конус> результат = Функтор.ВычислитьФунктор(word);
         foreach (string key in результат.Keys)
         {
             Storage.AddLocal(результат[key]);
         }
         word.ДобавитьВКообласть(результат.Values);
         Local[word.Имя] = word;
     }
     if (!Local.ContainsKey(word.Имя))
     {
         Local[word.Имя] = word;
     }
     return(Local[word.Имя]);
 }
Ejemplo n.º 3
0
        public void TestFunctors()
        {
            //"<",    // получает кообласть морфизма
            //">",    // получает область морфизма
            //"*",    // получает произведение морфизмов
            //"+",    // получет сумму морфизмов
            //"-",    // получает разность морфизмов
            //"^",    // получает пересечение морфизмов
            //"-:",    // получает проекцию морфизмов
            //"id",   // тождество
            Конус знакОбласть = new Конус("<");
            Конус знакКообласть = new Конус(">");
            Конус знакПроизведение = new Конус("*");
            Конус знакСумма = new Конус("+");
            Конус знакРазность = new Конус("-");
            Конус знакПересечение = new Конус("^");
            Конус знакПроекция = new Конус("~:");
            Конус знакВыбор = new Конус("~");
            Конус знакТождество = new Конус("id");
            Конус знакЛюбой = new Конус("_");

            Конус w1 = new Конус("1");
            Конус w2 = new Конус("2");
            Конус w1s = new Конус("один");
            Конус w2s = new Конус("два");

            Конус числоЦифрами = new Конус(new Конус("числоЦифрами"));
            числоЦифрами.ДобавитьВКообласть(new Конус[] { w1, w2 });

            Конус числоСловами = new Конус(new Конус("числоСловами"));
            числоСловами.ДобавитьВКообласть(new Конус[] { w1s, w2s });

            Конус числа = new Конус(new Конус("числа"));
            числа.ДобавитьВКообласть(new Конус[] { числоЦифрами, числоСловами });

            //Конус фОбласть = new Конус(new Конус[] { числоЦифрами, знакОбласть });
            //List<Конус> область = DataModelLibrary.Функтор.ВычислитьФунктор(фОбласть);
            //Assert.IsTrue(область.Count==2 && область[0].Имя == "1" && область[1].Имя == "2");

            //Конус фКообласть = new Конус(new Конус[] { числоЦифрами, знакКообласть });
            //List<Конус> кообласть = DataModelLibrary.Функтор.ВычислитьФунктор(фКообласть);
            //Assert.IsTrue(кообласть.Count == 1 && кообласть[0].Имя == "числа");

            //Конус фПроизведение = new Конус(new Конус[] { числоЦифрами, знакПроизведение, числоСловами });
            //List<Конус> произведение = DataModelLibrary.Функтор.ВычислитьФунктор(фПроизведение);
            //Assert.IsTrue(произведение.Count == 1 && произведение[0].Имя == "[числоЦифрами,числоСловами]");

            //Конус фСумма = new Конус(new Конус[] { числоЦифрами, знакСумма, числоСловами });
            //List<Конус> сумма = DataModelLibrary.Функтор.ВычислитьФунктор(фСумма);
            //Assert.IsTrue(сумма.Count == 2 &&
            //    сумма.Any(m=>m.Имя == "числоЦифрами"));

            //Конус фРазность = new Конус(new Конус[] { фСумма, знакРазность, числоСловами });
            //List<Конус> разность = DataModelLibrary.Функтор.ВычислитьФунктор(фРазность);
            //Assert.IsTrue(разность.Count == 1 &&
            //    разность.Any(m => m.Имя == "числоЦифрами"));

            //Конус фПересечение = new Конус(new Конус[] { фСумма, знакПересечение, числоСловами });
            //List<Конус> пересечение = DataModelLibrary.Функтор.ВычислитьФунктор(фПересечение);
            //Assert.IsTrue(пересечение.Count == 1 && пересечение[0].Имя == "числоСловами");

            //Конус шаблон = new Конус(new Конус[] { числоЦифрами, знакЛюбой });
            //Конус фПроекция = new Конус(new Конус[] { фПроизведение, знакПроекция, шаблон });
            //List<Конус> проекция = DataModelLibrary.Функтор.ВычислитьФунктор(фПроекция);
            //Assert.IsTrue(проекция.Count == 1 && проекция[0].Имя == "числоСловами");

            //Конус фКообластьПроизведения = Функтор.СоздатьФунктор(Функтор.Тип.ВычислениеКообласти, произведение.ToArray());
            //List<Конус> кообластьПроизведения = DataModelLibrary.Функтор.ВычислитьФунктор(фКообластьПроизведения);
            //Assert.IsTrue(кообластьПроизведения.Count == 4 &&
            //    кообластьПроизведения.Any(m => m.Имя == "[1,один]") &&
            //    кообластьПроизведения.Any(m => m.Имя == "[1,два]") &&
            //    кообластьПроизведения.Any(m => m.Имя == "[2,один]") &&
            //    кообластьПроизведения.Any(m => m.Имя == "[2,два]"));


        }