Skip to content

Commit 18910f2

Browse files
committed
LT-22353: Fix bug in NarrowAnalysisRewriteRuleSpec
1 parent bca7ec8 commit 18910f2

2 files changed

Lines changed: 158 additions & 0 deletions

File tree

src/SIL.Machine.Morphology.HermitCrab/PhonologicalRules/NarrowAnalysisRewriteRuleSpec.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Constraint<Word, ShapeNode> constraint in _analysisRhs.Children.Cast<Constraint<
5151
curNode = targetMatch.Input.Shape.AddAfter(curNode, fs, true);
5252
}
5353

54+
curNode = range.Start;
5455
for (int i = 0; i < _targetCount; i++)
5556
{
5657
curNode.Annotation.Optional = true;

tests/SIL.Machine.Morphology.HermitCrab.Tests/PhonologicalRules/RewriteRuleTests.cs

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,163 @@ public void MultipleSegmentRules()
425425
AssertMorphsEqual(morpher.ParseWord("buuubuuu"), "27");
426426
}
427427

428+
[Test]
429+
public void MultipleDeletionRules()
430+
{
431+
var highVowel = FeatureStruct
432+
.New(Language.PhonologicalFeatureSystem)
433+
.Symbol(HCFeatureSystem.Segment)
434+
.Symbol("cons-")
435+
.Symbol("voc+")
436+
.Symbol("high+")
437+
.Value;
438+
var backRnd = FeatureStruct
439+
.New(Language.PhonologicalFeatureSystem)
440+
.Symbol(HCFeatureSystem.Segment)
441+
.Symbol("back+")
442+
.Symbol("round+")
443+
.Value;
444+
var backRndVowel = FeatureStruct
445+
.New(Language.PhonologicalFeatureSystem)
446+
.Symbol(HCFeatureSystem.Segment)
447+
.Symbol("cons-")
448+
.Symbol("voc+")
449+
.Symbol("back+")
450+
.Symbol("round+")
451+
.Value;
452+
var t = FeatureStruct
453+
.New(Language.PhonologicalFeatureSystem)
454+
.Symbol(HCFeatureSystem.Segment)
455+
.Symbol("cons+")
456+
.Symbol("alveolar")
457+
.Symbol("del_rel-")
458+
.Symbol("asp-")
459+
.Symbol("vd-")
460+
.Symbol("strident-")
461+
.Value;
462+
463+
var rule1 = new RewriteRule
464+
{
465+
Name = "rule1",
466+
Lhs = Pattern<Word, ShapeNode>.New().Annotation(highVowel).Annotation(highVowel).Value
467+
};
468+
Allophonic.PhonologicalRules.Add(rule1);
469+
rule1.Subrules.Add(
470+
new RewriteSubrule
471+
{
472+
LeftEnvironment = Pattern<Word, ShapeNode>.New().Annotation(backRndVowel).Value
473+
}
474+
);
475+
476+
var morpher = new Morpher(TraceManager, Language);
477+
AssertMorphsEqual(morpher.ParseWord("bubu"), "27", "19");
478+
}
479+
480+
[Test]
481+
public void MergeRules()
482+
{
483+
var highVowel = FeatureStruct
484+
.New(Language.PhonologicalFeatureSystem)
485+
.Symbol(HCFeatureSystem.Segment)
486+
.Symbol("cons-")
487+
.Symbol("voc+")
488+
.Symbol("high+")
489+
.Value;
490+
var backRnd = FeatureStruct
491+
.New(Language.PhonologicalFeatureSystem)
492+
.Symbol(HCFeatureSystem.Segment)
493+
.Symbol("back+")
494+
.Symbol("round+")
495+
.Value;
496+
var backRndVowel = FeatureStruct
497+
.New(Language.PhonologicalFeatureSystem)
498+
.Symbol(HCFeatureSystem.Segment)
499+
.Symbol("cons-")
500+
.Symbol("voc+")
501+
.Symbol("back+")
502+
.Symbol("round+")
503+
.Value;
504+
var t = FeatureStruct
505+
.New(Language.PhonologicalFeatureSystem)
506+
.Symbol(HCFeatureSystem.Segment)
507+
.Symbol("cons+")
508+
.Symbol("alveolar")
509+
.Symbol("del_rel-")
510+
.Symbol("asp-")
511+
.Symbol("vd-")
512+
.Symbol("strident-")
513+
.Value;
514+
515+
var rule1 = new RewriteRule
516+
{
517+
Name = "rule1",
518+
Lhs = Pattern<Word, ShapeNode>.New().Annotation(highVowel).Annotation(highVowel).Value
519+
};
520+
Allophonic.PhonologicalRules.Add(rule1);
521+
rule1.Subrules.Add(
522+
new RewriteSubrule
523+
{
524+
Rhs = Pattern<Word, ShapeNode>.New().Annotation(t).Value,
525+
LeftEnvironment = Pattern<Word, ShapeNode>.New().Annotation(backRndVowel).Value
526+
}
527+
);
528+
529+
var morpher = new Morpher(TraceManager, Language);
530+
AssertMorphsEqual(morpher.ParseWord("butbut"), "27");
531+
}
532+
533+
[Test]
534+
public void MultipleMergeRules()
535+
{
536+
var highVowel = FeatureStruct
537+
.New(Language.PhonologicalFeatureSystem)
538+
.Symbol(HCFeatureSystem.Segment)
539+
.Symbol("cons-")
540+
.Symbol("voc+")
541+
.Symbol("high+")
542+
.Value;
543+
var backRnd = FeatureStruct
544+
.New(Language.PhonologicalFeatureSystem)
545+
.Symbol(HCFeatureSystem.Segment)
546+
.Symbol("back+")
547+
.Symbol("round+")
548+
.Value;
549+
var backRndVowel = FeatureStruct
550+
.New(Language.PhonologicalFeatureSystem)
551+
.Symbol(HCFeatureSystem.Segment)
552+
.Symbol("cons-")
553+
.Symbol("voc+")
554+
.Symbol("back+")
555+
.Symbol("round+")
556+
.Value;
557+
var t = FeatureStruct
558+
.New(Language.PhonologicalFeatureSystem)
559+
.Symbol(HCFeatureSystem.Segment)
560+
.Symbol("cons+")
561+
.Symbol("alveolar")
562+
.Symbol("del_rel-")
563+
.Symbol("asp-")
564+
.Symbol("vd-")
565+
.Symbol("strident-")
566+
.Value;
567+
568+
var rule1 = new RewriteRule
569+
{
570+
Name = "rule1",
571+
Lhs = Pattern<Word, ShapeNode>.New().Annotation(backRndVowel).Annotation(highVowel).Annotation(highVowel).Value
572+
};
573+
Allophonic.PhonologicalRules.Add(rule1);
574+
rule1.Subrules.Add(
575+
new RewriteSubrule
576+
{
577+
Rhs = Pattern<Word, ShapeNode>.New().Annotation(t).Annotation(t).Value,
578+
}
579+
);
580+
581+
var morpher = new Morpher(TraceManager, Language);
582+
AssertMorphsEqual(morpher.ParseWord("bttbtt"), "27");
583+
}
584+
428585
[Test]
429586
public void BoundaryRules()
430587
{

0 commit comments

Comments
 (0)