def test_types_lambda2(self): # Build AST string_to_file("#PREDICATE f=" + "%" + "(x,y).(x=0 & y=10|TRUE)", file_name) ast_string = file_to_AST_str(file_name) root = str_ast_to_python_ast(ast_string) # Type env = Environment() type_with_known_types(root, env, [], ["f", "x", "y"]) assert isinstance(get_type_by_name(env, "f"), PowerSetType) assert isinstance(get_type_by_name(env, "f").data, CartType) assert isinstance(get_type_by_name(env, "f").data.left, PowerSetType) assert isinstance(get_type_by_name(env, "f").data.right, PowerSetType) dom_type = get_type_by_name(env, "f").data.left img_type = get_type_by_name(env, "f").data.right # only present if lambda is ass. to var assert isinstance(img_type.data, BoolType) assert isinstance(dom_type.data, CartType) assert isinstance(dom_type.data.left, PowerSetType) assert isinstance(dom_type.data.right, PowerSetType) assert isinstance(dom_type.data.left.data, IntegerType) assert isinstance(dom_type.data.right.data, IntegerType) lambda_node = root.children[0].children[1] assert isinstance(lambda_node, ALambdaExpression) image_type = env.get_lambda_type_by_node(lambda_node) # this function always returns a type assert isinstance(image_type, BoolType)
def test_types_lambda(self): # Build AST string_to_file("#PREDICATE f=" + "%" + "x.(x>0 & x<10|x*x)", file_name) ast_string = file_to_AST_str(file_name) root = str_ast_to_python_ast(ast_string) # Type env = Environment() type_with_known_types(root, env, [], ["f", "x"]) assert isinstance(get_type_by_name(env, "f"), PowerSetType) assert isinstance(get_type_by_name(env, "f").data, CartType) assert isinstance(get_type_by_name(env, "f").data.left.data, IntegerType) assert isinstance(get_type_by_name(env, "f").data.right.data, IntegerType) assert isinstance(get_type_by_name(env, "x"), IntegerType) lambda_node = root.children[0].children[1] assert isinstance(lambda_node, ALambdaExpression) image_type = env.get_lambda_type_by_node(lambda_node) assert isinstance(image_type, IntegerType)