Beispiel #1
0
    def test_parse_arg(self):

        num_arg1 = Parser.string_to_sexpr("[x : Num]")
        num_arg2 = Parser.string_to_sexpr("[x: Num]")
        self.assertEqual(num_arg1, num_arg2)

        num_arg = Parser.parse_arg(num_arg1)
        self.assertEqual(num_arg.identifier, "x")
        self.assertEqual(num_arg.type, NumType())

        string_arg = self.to_arg("[s: Str]")
        self.assertEqual(string_arg.identifier, "s")
        self.assertEqual(string_arg.type, StringType())

        bool_arg = self.to_arg("[x: Bool]")
        self.assertEqual(bool_arg.identifier, "x")
        self.assertEqual(bool_arg.type, BoolType())

        list_arg = self.to_arg("[l: (List Str)]")
        self.assertEqual(list_arg.identifier, "l")
        self.assertEqual(list_arg.type, ListType(StringType()))

        dynamic_arg = self.to_arg("d")
        self.assertEqual(dynamic_arg.identifier, "d")
        self.assertEqual(dynamic_arg.type, DynamicType())

        fun_arg = self.to_arg("[f: (Str -> Num)]")
        self.assertEqual(fun_arg.identifier, "f")
        self.assertEqual(fun_arg.type, FunType([StringType()], NumType()))

        fun_arg = self.to_arg("[g: (Num Str -> Bool)]")
        self.assertEqual(fun_arg.identifier, "g")
        self.assertEqual(fun_arg.type, FunType([NumType(), StringType()], BoolType()))

        fun_arg = self.to_arg("[h: ((Num -> Num) -> (Str -> Num))]")
        self.assertEqual(fun_arg.identifier, "h")
        self.assertEqual(fun_arg.type, FunType([FunType([NumType()], NumType())], FunType([StringType()], NumType())))
Beispiel #2
0
    def to_arg(self, arg_string):

        sexpr = Parser.string_to_sexpr(arg_string)
        return Parser.parse_arg(sexpr)