示例#1
0
    def test_throws_for_missing_output(self):
        example = """
# foo

- name
- banana
"""
        with self.assertRaisesRegex(
                Exception,
                "- banana is used in # foo but it's not defined anywhere. Defined tags are #int, #float, #string, #name, #foo"
        ):
            parse(example)
示例#2
0
    def test_throws_for_invalid_tag_name(self):
        example = """
# assignment:

`#name = #int`

    set #name to #int
"""
        with self.assertRaisesRegex(
                Exception,
                "# assignment: is invalid, only letters and _ are allowed"):
            parse(example)
示例#3
0
    def test_throws_if_example_does_not_have_all_tags(self):
        example = """
# assignment

`#name = #int`

    set #name
    let #name to be #int
"""
        with self.assertRaisesRegex(
                Exception,
                "missing #int in example 1 of assignment `#name = #int`"):
            parse(example)
示例#4
0
    def test_throws_for_missing_output(self):
        example = """
# assignment

`#name = #banana`

    set #name to #banana
"""
        with self.assertRaisesRegex(
                Exception,
                "#banana is used in # assignment but it's not defined anywhere. Defined tags are #int, #float, #string, #name, #assignment"
        ):
            parse(example)
示例#5
0
    def test_throws_if_example_does_not_have_all_tags(self):
        example = """
# params

`(#string, #string, #string)`

    (#string, #string, #string)
    (#string #string)
"""
        with self.assertRaisesRegex(
                Exception,
                "missing 1 #string in example 2 of params `\(#string, #string, #string\)`. Expected to find 3 #string, found 2."
        ):
            parse(example)
示例#6
0
    def test_throws_when_defined_twice(self):
        example = """
# foo

- name
- string

# foo

- string
- int
"""
        with self.assertRaisesRegex(Exception, "# foo is being defined twice"):
            parse(example)
示例#7
0
    def test_throws_for_missing_output(self):
        example = """
# foo

    1 + 1

# assignment

`#name = #int`

    set #name to #int
"""
        with self.assertRaisesRegex(Exception, "output missing on # foo"):
            parse(example)
示例#8
0
    def test_parses_examples(self):
        example = """
# assignment

`#name = #int`

    set #name to #int
    let #name to be #int

# function

`def #name(#params):`

    define function #name #params
    fun #name #params

# params

- name
"""
        result = parse(example)
        self.assertEqual(
            result, {
                "assignment": {
                    "inputs": ["set #name to #int", "let #name to be #int"],
                    "output": "#name = #int"
                },
                "function": {
                    "inputs":
                    ["define function #name #params", "fun #name #params"],
                    "output":
                    "def #name(#params):"
                },
                "params": ["name"]
            })
示例#9
0
    def test_parses_composition_tags(self):
        example = """
# value

- string
- int
"""
        result = parse(example)
        self.assertEqual(result, {"value": ["string", "int"]})
示例#10
0
    def test_parses_prime_tags(self):
        example = """
# list_processing

`[ x[#name] for x in [#int] ]`

    select #name from [#int]
    from [#int] map #name
    [#int].map(#name' => #name'[#name])
"""
        result = parse(example)
        self.assertEqual(
            result, {
                "list_processing": {
                    "inputs": [
                        "select #name from [#int]", "from [#int] map #name",
                        "[#int].map(#name' => #name'[#name])"
                    ],
                    "output":
                    "[ x[#name] for x in [#int] ]"
                },
            })
示例#11
0
#!/usr/bin/env python3

import sys
import os.path as path

root = path.join(path.dirname(path.realpath(__file__)), "..")
sys.path.append(root)

from langcreator.parser import parse
from langcreator.generator import generate_samples, save_generated

if __name__ == '__main__':
    with open("langcreator/natural.md") as f:
        content = f.read()

    generators = parse(content)
    n = int(sys.argv[1]) if len(sys.argv) > 1 else 10_000
    print(f"Generating {n} samples...")
    samples = generate_samples(generators, n)
    save_generated(samples)

    print("Done!")
示例#12
0
    def test_parses_full_natural_definition_raising_no_exceptions(self):
        with open("langcreator/natural.md") as f:
            content = f.read()

        parse(content)