public void AllomorphEnvironments() { var vowel = FeatureStruct.New(Language.PhonologicalFeatureSystem).Symbol("voc+").Value; LexEntry headEntry = Entries["32"]; Pattern <Word, ShapeNode> envPattern = Pattern <Word, ShapeNode> .New().Annotation(vowel).Value; var env = new AllomorphEnvironment(SpanFactory, ConstraintType.Require, null, envPattern); headEntry.PrimaryAllomorph.Environments.Add(env); var word = new Word(headEntry.PrimaryAllomorph, FeatureStruct.New().Value); ShapeNode node = word.Shape.Last; LexEntry nonHeadEntry = Entries["40"]; word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone()); Annotation <ShapeNode> nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last), nonHeadEntry.PrimaryAllomorph); Assert.That(env.IsWordValid(word), Is.True); word.RemoveMorph(nonHeadMorph); nonHeadEntry = Entries["41"]; word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone()); nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last), nonHeadEntry.PrimaryAllomorph); Assert.That(env.IsWordValid(word), Is.False); headEntry.PrimaryAllomorph.Environments.Clear(); env = new AllomorphEnvironment(SpanFactory, ConstraintType.Require, envPattern, null); headEntry.PrimaryAllomorph.Environments.Add(env); word.RemoveMorph(nonHeadMorph); node = word.Shape.First; nonHeadEntry = Entries["40"]; word.Shape.AddRangeAfter(word.Shape.Begin, nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone()); nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev), nonHeadEntry.PrimaryAllomorph); Assert.That(env.IsWordValid(word), Is.True); word.RemoveMorph(nonHeadMorph); nonHeadEntry = Entries["41"]; word.Shape.AddRangeAfter(word.Shape.Begin, nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone()); word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev), nonHeadEntry.PrimaryAllomorph); Assert.That(env.IsWordValid(word), Is.False); }
public void AllomorphEnvironments() { var vowel = FeatureStruct.New(Language.PhonologicalFeatureSystem).Symbol("voc+").Value; LexEntry headEntry = Entries["32"]; Pattern<Word, ShapeNode> envPattern = Pattern<Word, ShapeNode>.New().Annotation(vowel).Value; var env = new AllomorphEnvironment(SpanFactory, ConstraintType.Require, null, envPattern); headEntry.PrimaryAllomorph.Environments.Add(env); var word = new Word(headEntry.PrimaryAllomorph, FeatureStruct.New().Value); ShapeNode node = word.Shape.Last; LexEntry nonHeadEntry = Entries["40"]; word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone()); Annotation<ShapeNode> nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last), nonHeadEntry.PrimaryAllomorph); Assert.That(env.IsWordValid(word), Is.True); word.RemoveMorph(nonHeadMorph); nonHeadEntry = Entries["41"]; word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone()); nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last), nonHeadEntry.PrimaryAllomorph); Assert.That(env.IsWordValid(word), Is.False); headEntry.PrimaryAllomorph.Environments.Clear(); env = new AllomorphEnvironment(SpanFactory, ConstraintType.Require, envPattern, null); headEntry.PrimaryAllomorph.Environments.Add(env); word.RemoveMorph(nonHeadMorph); node = word.Shape.First; nonHeadEntry = Entries["40"]; word.Shape.AddRangeAfter(word.Shape.Begin, nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone()); nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev), nonHeadEntry.PrimaryAllomorph); Assert.That(env.IsWordValid(word), Is.True); word.RemoveMorph(nonHeadMorph); nonHeadEntry = Entries["41"]; word.Shape.AddRangeAfter(word.Shape.Begin, nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone()); word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev), nonHeadEntry.PrimaryAllomorph); Assert.That(env.IsWordValid(word), Is.False); }