def test_type_map1(): """type map: maps each type to a list of objects""" type_object = Type("object", None) type_vehicle = Type("vehicle", type_object) type_car = Type("car", type_vehicle) type_truck = Type("truck", type_vehicle) type_city = Type("city", type_object) objects = { "red_car": type_car, "green_car": type_car, "blue_truck": type_truck, "motorbike": type_vehicle, "freiburg": type_city, "basel": type_city } type_map = grounding._create_type_map(objects) expected = [("red_car", type_map[type_car]), ("green_car", type_map[type_car]), ("blue_truck", type_map[type_truck]), ("red_car", type_map[type_vehicle]), ("green_car", type_map[type_vehicle]), ("blue_truck", type_map[type_vehicle]), ("motorbike", type_map[type_vehicle]), ("freiburg", type_map[type_city]), ("basel", type_map[type_city]), ("green_car", type_map[type_object]), ("motorbike", type_map[type_object]), ("basel", type_map[type_object])] for object, object_list in expected: yield in_object_set, object, object_list
def test_statics2(): type_object = Type("object", None) predicate_a = Predicate("a", []) predicate_b = Predicate("b", []) the_action = get_action("the-action", [], [predicate_a], [predicate_b], []) statics = grounding._get_statics([predicate_a, predicate_b], [the_action]) assert predicate_a.name in statics and predicate_b.name not in statics
def test_statics1(): """ A static predicate is a predicate, which doesn't occur in an effect of an action. """ type_object = Type("object", None) type_car = Type("car", type_vehicle) type_city = Type("city", type_object) type_country = Type("country", type_object) types = { "object": type_object, "car": type_car, "city": type_city, "country": type_country, } predicate_orig = Predicate("at", [("car", types["car"]), ("dest", types["city"])]) predicate_dest = Predicate("at", [("car", types["car"]), ("orig", types["city"])]) predicate_in = Predicate("in", [("city", types["city"]), ("country", types["country"])]) action_drive_car = get_action( "DRIVE-CAR", [ ("car", [types["car"]]), ("loc-orig", [types["city"]]), ("loc-dest", [types["city"]]), ], [predicate_orig], [predicate_dest], [predicate_orig], ) assert "in" in grounding._get_statics([predicate_in], [action_drive_car]) assert "dest" not in grounding._get_statics([predicate_dest], [action_drive_car]) assert "orig" not in grounding._get_statics([predicate_orig], [action_drive_car])
def test_statics1(): """ A static predicate is a predicate, which doesn't occur in an effect of an action. """ type_object = Type("object", None) type_car = Type("car", type_vehicle) type_city = Type("city", type_object) type_country = Type("country", type_object) types = { "object": type_object, "car": type_car, "city": type_city, "country": type_country } predicate_orig = Predicate("at", [("car", types["car"]), ("dest", types["city"])]) predicate_dest = Predicate("at", [("car", types["car"]), ("orig", types["city"])]) predicate_in = Predicate("in", [("city", types["city"]), ("country", types["country"])]) action_drive_car = get_action("DRIVE-CAR", [("car", [types["car"]]), ("loc-orig", [types["city"]]), ("loc-dest", [types["city"]])], [predicate_orig], [predicate_dest], [predicate_orig]) expected = [ ("in", grounding._get_statics([predicate_in], [action_drive_car]), True), ("dest", grounding._get_statics([predicate_dest], [action_drive_car]), False), ("orig", grounding._get_statics([predicate_orig], [action_drive_car]), False) ] for pre, statics, element in expected: yield in_statics, pre, statics, element
def test_type(): test = Type("test", "parent") assert str(test) == repr(test)
def test_regression(): parser = Parser("") def parse_problem(domain, problem): parser.domInput = domain parser.probInput = problem domain = parser.parse_domain(False) return parser.parse_problem(domain, False) prob_05 = """ ;; See domain file for description of this test. (define (problem regression-test-05) (:domain regression-test) (:objects y - object) (:init) (:goal (the-predicate x y))) """ dom_05 = """ ;; Expected behaviour: plan of length one found ;; Observed behaviour (r265): plan of length zero found (define (domain regression-test) (:requirements :typing) ;; work around problem in regression test #4. (:predicates (the-predicate ?v1 ?v2 - object)) (:constants x - object) (:action theaction :parameters (?x - object) :precondition (and) :effect (the-predicate x ?x) ) ) """ prob_06 = """ ;; See domain file for description of this test. (define (problem regression-test-06) (:domain regression-test) (:objects y - object) (:init) (:goal (the-predicate y y))) """ dom_06 = """ ;; Expected behaviour: planner proves that no plan exists ;; Observed behaviour (r265): plan of length one found (define (domain regression-test) (:requirements :typing) ;; work around problem in regression test #4. (:predicates (the-predicate ?v1 ?v2 - object)) (:constants x - object) (:action theaction :parameters (?x - object) :precondition (and) :effect (the-predicate x ?x) ) ) """ # problem / domain 07 contains a different action compared # to the actions of domain 5 & 6 prob_07 = prob_06 dom_07 = """ (define (domain regression-test) (:requirements :typing) ;; work around problem in regression test #4. (:predicates (the-predicate ?v1 ?v2 - object)) (:constants y - object) (:action theaction :parameters (?x - object) :precondition (and) :effect (the-predicate y ?x) ) ) """ # action of problem / domain 8 differs only in the variable name compared # to the actions of problem 5 and 6: After grounding there should be no # difference between the grounded actions prob_08 = prob_05 dom_08 = """ (define (domain regression-test) (:requirements :typing) ;; work around problem in regression test #4. (:predicates (the-predicate ?v1 ?v2 - object)) (:constants x - object) (:action theaction :parameters (?z - object) :precondition (and) :effect (the-predicate x ?z) ) ) """ parsed_problem5 = parse_problem(dom_05, prob_05) parsed_problem6 = parse_problem(dom_06, prob_06) parsed_problem7 = parse_problem(dom_07, prob_07) parsed_problem8 = parse_problem(dom_08, prob_08) # coded input: type_object = Type("object", None) types = {"object": type_object} predicates = { "the_predicate": Predicate("the-predicate", [("v1", type_object), ("v2", type_object)]) } constants = {"x": type_object} actions = { "theaction": get_action( "theaction", [("?x", [type_object])], [], [ Predicate("the-predicate", [("x", type_object), ("?x", type_object)]) ], [], ) } domain = Domain("regression-test", types, predicates, actions, constants) problem5 = Problem( "regression-test-05", domain, {"y": type_object}, [], [Predicate("the-predicate", [("x", type_object), ("y", type_object)])], ) problem6 = Problem( "regression-test-06", domain, {"y": type_object}, [], [Predicate("the-predicate", [("y", type_object), ("y", type_object)])], ) parsed_task5 = grounding.ground(parsed_problem5) coded_task5 = grounding.ground(problem5) parsed_task6 = grounding.ground(parsed_problem6) coded_task6 = grounding.ground(problem6) parsed_task7 = grounding.ground(parsed_problem7) parsed_task8 = grounding.ground(parsed_problem8) expected = [ (parsed_task5.operators, coded_task5.operators, True), (parsed_task6.operators, coded_task6.operators, True), (parsed_task5.operators, coded_task6.operators, False), (parsed_task5.operators, parsed_task7.operators, False), (parsed_task5.operators, parsed_task8.operators, True), ] for operator1, operator2, expected_result in expected: assert compare_operators(operator1, operator2) == expected_result
def test_type_map2(): type_object = Type("object", None) objects = {"object1": type_object} type_map = grounding._create_type_map(objects) assert "object1" in type_map[type_object]
from task import Operator def get_action(name, signature, precondition, addlist, dellist): effect = Effect() effect.addlist = set(addlist) effect.dellist = set(dellist) return Action(name, signature, precondition, effect) """ test domain and problem """ # types: type_object = Type("object", None) type_vehicle = Type("vehicle", type_object) type_car = Type("car", type_vehicle) type_truck = Type("truck", type_vehicle) type_city = Type("city", type_object) type_country = Type("country", type_object) type_my_car = Type("my_car", type_vehicle) type_color = Type("color", type_object) types = { "object": type_object, "vehicle": type_vehicle, "car": type_car, "truck": type_truck, "city": type_city, "country": type_country,