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); }
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.Имя]); }
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,два]")); }