From fd10e66398cf58db28c3dde6cfd89894fbaa6183 Mon Sep 17 00:00:00 2001 From: Rajat Jain <1997.rajatjain@gmail.com> Date: Mon, 11 Feb 2019 07:59:39 +0530 Subject: [PATCH 1/4] Added coverage report generation to Travis Added: - .coveragerc file to configure report generation Modified: - .travis.yml to start generating reports during build --- .coveragerc | 3 +++ .travis.yml | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .coveragerc diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 000000000..2398f62e3 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,3 @@ +[report] +omit = + tests/* \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index e374eff1f..3cecad727 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,9 +15,10 @@ install: - pip install networkx - pip install ipywidgets - pip install Pillow + - pip install pytest-cov script: - - py.test + - py.test --cov=./ - python -m doctest -v *.py after_success: From 752adeed6aab0f6f96a2226f9ed15853f216d327 Mon Sep 17 00:00:00 2001 From: Rajat Jain <1997.rajatjain@gmail.com> Date: Thu, 14 Feb 2019 17:51:47 +0530 Subject: [PATCH 2/4] Added WumpusWorld testcases Added: - Testcases in test_agents.py Modified: - Duplicate walls are not added in corners now --- agents.py | 2 +- tests/test_agents.py | 52 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/agents.py b/agents.py index f7ccb255b..d9e1f7e8d 100644 --- a/agents.py +++ b/agents.py @@ -540,7 +540,7 @@ def add_walls(self): for x in range(self.width): self.add_thing(Wall(), (x, 0)) self.add_thing(Wall(), (x, self.height - 1)) - for y in range(self.height): + for y in range(1, self.height-1): self.add_thing(Wall(), (0, y)) self.add_thing(Wall(), (self.width - 1, y)) diff --git a/tests/test_agents.py b/tests/test_agents.py index dd390fc89..61d90a489 100644 --- a/tests/test_agents.py +++ b/tests/test_agents.py @@ -4,6 +4,7 @@ from agents import ReflexVacuumAgent, ModelBasedVacuumAgent, TrivialVacuumEnvironment, compare_agents,\ RandomVacuumAgent, TableDrivenVacuumAgent, TableDrivenAgentProgram, RandomAgentProgram, \ SimpleReflexAgentProgram, ModelBasedReflexAgentProgram, rule_match +from agents import Wall, Gold, Explorer, Thing, Bump, Glitter, WumpusEnvironment, Pit random.seed("aima-python") @@ -264,3 +265,54 @@ def constant_prog(percept): agent = Agent(constant_prog) result = agent.program(5) assert result == 5 + +def test_WumpusEnvironment(): + def constant_prog(percept): + return percept + # Initialize Wumpus Environment + w = WumpusEnvironment(constant_prog) + + #Check if things are added properly + assert len([x for x in w.things if isinstance(x, Wall)]) == 20 + assert any(map(lambda x: isinstance(x, Gold), w.things)) + assert any(map(lambda x: isinstance(x, Explorer), w.things)) + assert not any(map(lambda x: not isinstance(x,Thing), w.things)) + + #Check that gold and wumpus are not present on (1,1) + assert not any(map(lambda x: isinstance(x, Gold) or isinstance(x,WumpusEnvironment), + w.list_things_at((1,1)))) + + #Check if w.get_world() segments objects correctly + assert len(w.get_world()) == 6 + for row in w.get_world(): + assert len(row) == 6 + + #Start the game! + agent = [x for x in w.things if isinstance(x, Explorer)][0] + gold = [x for x in w.things if isinstance(x, Gold)][0] + pit = [x for x in w.things if isinstance(x, Pit)][0] + + assert w.is_done()==False + + #Check Walls + agent.location = (1,2) + percepts = w.percept(agent) + assert len(percepts) == 5 + assert any(map(lambda x: isinstance(x,Bump), percepts[0])) + + #Check Gold + agent.location = gold.location + percepts = w.percept(agent) + assert any(map(lambda x: isinstance(x,Glitter), percepts[4])) + agent.location = (gold.location[0], gold.location[1]+1) + percepts = w.percept(agent) + assert not any(map(lambda x: isinstance(x,Glitter), percepts[4])) + + #Check agent death + agent.location = pit.location + assert w.in_danger(agent) == True + assert agent.alive == False + assert agent.killed_by == Pit.__name__ + assert agent.performance == -1000 + + assert w.is_done()==True \ No newline at end of file From c42c93b3018a78819bc062bb5c906cf3b2ad6726 Mon Sep 17 00:00:00 2001 From: Rajat Jain <1997.rajatjain@gmail.com> Date: Fri, 15 Feb 2019 16:35:07 +0530 Subject: [PATCH 3/4] Tests for VacuumEnvironment and WumpusEnvironment Added: - Test cases for Explorer actions in WumpusEnvironment - Test cases for VacuumEnvironment Modified: - VacuumAgent correctly disables bump percept when agent sucks dirt after bumping into a wall --- agents.py | 1 + tests/test_agents.py | 58 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/agents.py b/agents.py index d9e1f7e8d..331813c37 100644 --- a/agents.py +++ b/agents.py @@ -719,6 +719,7 @@ def percept(self, agent): return (status, bump) def execute_action(self, agent, action): + agent.bump = False if action == 'Suck': dirt_list = self.list_things_at(agent.location, Dirt) if dirt_list != []: diff --git a/tests/test_agents.py b/tests/test_agents.py index 61d90a489..d847b426a 100644 --- a/tests/test_agents.py +++ b/tests/test_agents.py @@ -4,7 +4,8 @@ from agents import ReflexVacuumAgent, ModelBasedVacuumAgent, TrivialVacuumEnvironment, compare_agents,\ RandomVacuumAgent, TableDrivenVacuumAgent, TableDrivenAgentProgram, RandomAgentProgram, \ SimpleReflexAgentProgram, ModelBasedReflexAgentProgram, rule_match -from agents import Wall, Gold, Explorer, Thing, Bump, Glitter, WumpusEnvironment, Pit +from agents import Wall, Gold, Explorer, Thing, Bump, Glitter, WumpusEnvironment, Pit, \ + VacuumEnvironment, Dirt random.seed("aima-python") @@ -266,6 +267,32 @@ def constant_prog(percept): result = agent.program(5) assert result == 5 +def test_VacuumEnvironment(): + # Initialize Vacuum Environment + v = VacuumEnvironment(6,6) + #Get an agent + agent = ModelBasedVacuumAgent() + agent.direction = Direction(Direction.R) + v.add_thing(agent) + v.add_thing(Dirt(), location=(2,1)) + + # Check if things are added properly + assert len([x for x in v.things if isinstance(x, Wall)]) == 20 + assert len([x for x in v.things if isinstance(x, Dirt)]) == 1 + + #Let the action begin! + assert v.percept(agent) == ("Clean", "None") + v.execute_action(agent, "Forward") + assert v.percept(agent) == ("Dirty", "None") + v.execute_action(agent, "TurnLeft") + v.execute_action(agent, "Forward") + assert v.percept(agent) == ("Dirty", "Bump") + v.execute_action(agent, "Suck") + assert v.percept(agent) == ("Clean", "None") + old_performance = agent.performance + v.execute_action(agent, "NoOp") + assert old_performance == agent.performance + def test_WumpusEnvironment(): def constant_prog(percept): return percept @@ -315,4 +342,33 @@ def constant_prog(percept): assert agent.killed_by == Pit.__name__ assert agent.performance == -1000 + assert w.is_done()==True + +def test_WumpusEnvironmentActions(): + def constant_prog(percept): + return percept + # Initialize Wumpus Environment + w = WumpusEnvironment(constant_prog) + + agent = [x for x in w.things if isinstance(x, Explorer)][0] + gold = [x for x in w.things if isinstance(x, Gold)][0] + pit = [x for x in w.things if isinstance(x, Pit)][0] + + agent.location = (1,1) + assert agent.direction.direction == "right" + w.execute_action(agent, 'TurnRight') + assert agent.direction.direction == "down" + w.execute_action(agent, 'TurnLeft') + assert agent.direction.direction == "right" + w.execute_action(agent, 'Forward') + assert agent.location == (2,1) + + agent.location = gold.location + w.execute_action(agent, 'Grab') + assert agent.holding == [gold] + + agent.location = (1,1) + w.execute_action(agent, 'Climb') + assert not any(map(lambda x: isinstance(x, Explorer), w.things)) + assert w.is_done()==True \ No newline at end of file From 71bf192fe5e409ed1b04a985043776bba6de2833 Mon Sep 17 00:00:00 2001 From: Rajat Jain <1997.rajatjain@gmail.com> Date: Sat, 16 Feb 2019 07:59:43 +0530 Subject: [PATCH 4/4] Added spaces in tuples to comply with PEP8 --- tests/test_agents.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_agents.py b/tests/test_agents.py index d847b426a..3c133c32a 100644 --- a/tests/test_agents.py +++ b/tests/test_agents.py @@ -307,7 +307,7 @@ def constant_prog(percept): #Check that gold and wumpus are not present on (1,1) assert not any(map(lambda x: isinstance(x, Gold) or isinstance(x,WumpusEnvironment), - w.list_things_at((1,1)))) + w.list_things_at((1, 1)))) #Check if w.get_world() segments objects correctly assert len(w.get_world()) == 6 @@ -322,7 +322,7 @@ def constant_prog(percept): assert w.is_done()==False #Check Walls - agent.location = (1,2) + agent.location = (1, 2) percepts = w.percept(agent) assert len(percepts) == 5 assert any(map(lambda x: isinstance(x,Bump), percepts[0])) @@ -354,20 +354,20 @@ def constant_prog(percept): gold = [x for x in w.things if isinstance(x, Gold)][0] pit = [x for x in w.things if isinstance(x, Pit)][0] - agent.location = (1,1) + agent.location = (1, 1) assert agent.direction.direction == "right" w.execute_action(agent, 'TurnRight') assert agent.direction.direction == "down" w.execute_action(agent, 'TurnLeft') assert agent.direction.direction == "right" w.execute_action(agent, 'Forward') - assert agent.location == (2,1) + assert agent.location == (2, 1) agent.location = gold.location w.execute_action(agent, 'Grab') assert agent.holding == [gold] - agent.location = (1,1) + agent.location = (1, 1) w.execute_action(agent, 'Climb') assert not any(map(lambda x: isinstance(x, Explorer), w.things))
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: