예제 #1
0
def test_simple_production():
    cfg = CFG([
        ("S", PList([PTerminal("foo"), PTerminal("bar")]))
    ])
    expect = [("foo", "bar")]
    result = list(cfg.permutation_values("S"))
    assert expect == result
예제 #2
0
def test_simple_production_ref():
    cfg = CFG([
        ("S", PTerminal("foo")),
    ])
    expect = [("foo",)]
    result = list(cfg.permutation_values(PRef("S")))
    assert expect == result
예제 #3
0
def test_simple_production_union():
    cfg = CFG([
        ("S", PUnion([PTerminal("foo"), PTerminal("bar")])),
    ])
    expect = [("foo", ), ("bar", )]
    result = list(cfg.permutation_values("S"))
    assert expect == result
예제 #4
0
파일: test_cfg.py 프로젝트: galty687/nlgen
def test_multiple_productions_same_rule():
    cfg = CFG([
        ("S", PTerminal("foo")),
        ("S", PTerminal("bar"))
    ])
    result = cfg.permutation_values("S")
    expect = [("foo",), ("bar",)]
    assert set(result) == set(expect)
예제 #5
0
파일: test_cfg.py 프로젝트: galty687/nlgen
def test_passing_features(features, expected):
    """ asking for a permutation with specific features should work. """
    cfg = CFG([
        ("S", PTerminal("I", features={"person": 1})),
        ("S", PTerminal("you", features={"person": 2})),
        ("S", PTerminal("he", features={"person": 3, "gender": "m"})),
        ("S", PTerminal("she", features={"person": 3, "gender": "f"}))
    ])
    print(expected)
    print(set(cfg.permutation_values("S", features=features)))
    assert set(cfg.permutation_values("S", features=features)) == expected
예제 #6
0
def test_full_example():
    my_cfg = CFG([("PRONOUN", PTerminal("I")), ("VERB", PTerminal("have")),
                  ("NOUN", PTerminal("candy")), ("NOUN", PTerminal("bonbons")),
                  ("SENTENCE",
                   PList([PRef("PRONOUN"),
                          PRef("VERB"),
                          PRef("NOUN")]))])
    result = set(my_cfg.permutation_values("SENTENCE"))
    expect = set([
        ("I", "have", "candy"),
        ("I", "have", "bonbons"),
    ])
예제 #7
0
def test_feature_mismatch():
    """ a feature mismatch should result """
    my_cfg = CFG([("PRONOUN", PTerminal("I", features={"person": set("1")})),
                  ("PRONOUN", PTerminal("You", features={"person": set("2")})),
                  ("VERB", PTerminal("have", features={"person": set("2")})),
                  ("NOUN", PTerminal("candy")),
                  ("SENTENCE",
                   PList([PRef("PRONOUN"),
                          PRef("VERB"),
                          PRef("NOUN")]))])
    result = set(my_cfg.permutation_values("SENTENCE"))
    expect = set([("You", "have", "candy")])
    assert result == expect
예제 #8
0
def test_passing_features(features, expected):
    """ asking for a permutation with specific features should work. """
    cfg = CFG([("S", PTerminal("I", features={"person": 1})),
               ("S", PTerminal("you", features={"person": 2})),
               ("S", PTerminal("he", features={
                   "person": 3,
                   "gender": "m"
               })),
               ("S", PTerminal("she", features={
                   "person": 3,
                   "gender": "f"
               }))])
    print(expected)
    print(set(cfg.permutation_values("S", features=features)))
    assert set(cfg.permutation_values("S", features=features)) == expected
예제 #9
0
파일: test_full.py 프로젝트: galty687/nlgen
def test_feature_mismatch():
    """ a feature mismatch should result """
    my_cfg = CFG([
        ("PRONOUN", PTerminal("I", features={"person": set("1")})),
        ("PRONOUN", PTerminal("You", features={"person": set("2")})),
        ("VERB", PTerminal("have", features={"person": set("2")})),
        ("NOUN", PTerminal("candy")),
        ("SENTENCE", PList([
            PRef("PRONOUN"),
            PRef("VERB"),
            PRef("NOUN")
        ]))
    ])
    result = set(my_cfg.permutation_values("SENTENCE"))
    expect = set([("You", "have", "candy")])
    assert result == expect
예제 #10
0
파일: test_full.py 프로젝트: galty687/nlgen
def test_full_example():
    my_cfg = CFG([
        ("PRONOUN", PTerminal("I")),
        ("VERB", PTerminal("have")),
        ("NOUN", PTerminal("candy")),
        ("NOUN", PTerminal("bonbons")),
        ("SENTENCE", PList([
            PRef("PRONOUN"),
            PRef("VERB"),
            PRef("NOUN")
        ]))
    ])
    result = set(my_cfg.permutation_values("SENTENCE"))
    expect = set([
        ("I", "have", "candy"),
        ("I", "have", "bonbons"),
    ])
예제 #11
0
def test_list_with_features():
    """
    if a feature is passed into the list, it will only
    accept a collected feature set that matches.
    """
    cfg = CFG([
        ("AB_UPPER", PList([PRef("A"), PRef("B")],
                           features={"case": "upper"})),
        ("AB_LOWER", PList([PRef("A"), PRef("B")],
                           features={"case": "lower"})),
        ("A", PUnion(
            [PTerminal("a", features={"case": "lower"}),
             PTerminal("A", features={"case": "upper"})]
        )),
        ("B", PUnion(
            [PTerminal("b", features={"case": "lower"}),
             PTerminal("B", features={"case": "upper"})]
        ))
    ])
    assert list(cfg.permutation_values("AB_UPPER")) == [("A", "B")]
    assert list(cfg.permutation_values("AB_LOWER")) == [("a", "b")]
예제 #12
0
def test_list_with_features():
    """
    if a feature is passed into the list, it will only
    accept a collected feature set that matches.
    """
    cfg = CFG([("AB_UPPER",
                PList([PRef("A"), PRef("B")], features={"case": "upper"})),
               ("AB_LOWER",
                PList([PRef("A"), PRef("B")], features={"case": "lower"})),
               ("A",
                PUnion([
                    PTerminal("a", features={"case": "lower"}),
                    PTerminal("A", features={"case": "upper"})
                ])),
               ("B",
                PUnion([
                    PTerminal("b", features={"case": "lower"}),
                    PTerminal("B", features={"case": "upper"})
                ]))])
    assert list(cfg.permutation_values("AB_UPPER")) == [("A", "B")]
    assert list(cfg.permutation_values("AB_LOWER")) == [("a", "b")]
예제 #13
0
def test_multiple_productions_same_rule():
    cfg = CFG([("S", PTerminal("foo")), ("S", PTerminal("bar"))])
    result = cfg.permutation_values("S")
    expect = [("foo", ), ("bar", )]
    assert set(result) == set(expect)
예제 #14
0
def test_equality():
    lhs = CFG([("S", PTerminal("foo")), ("S", PTerminal("bar"))])
    rhs = CFG([("S", PTerminal("foo")), ("S", PTerminal("bar"))])
    assert lhs == rhs
예제 #15
0
def test_simple_terminal():
    cfg = CFG([("S", PTerminal("foo"))])
    assert list(cfg.permutation_values("S")) == [("foo", )]
예제 #16
0
def test_simple_terminal():
    cfg = CFG([
        ("S", PTerminal("foo"))
    ])
    assert list(cfg.permutation_values("S")) == [("foo",)]