Insights Blog
-- Browse All Articles --
Physics Articles
Physics Tutorials
Physics Guides
Physics FAQ
Math Articles
Math Tutorials
Math Guides
Math FAQ
Education Articles
Education Guides
Bio/Chem Articles
Technology Guides
Computer Science Tutorials
Forums
Chemistry
Biology and Medical
Earth Sciences
Computer Science
Computing and Technology
DIY Projects
Trending
Featured Threads
Log in
Register
What's new
Search
Search
Search titles only
By:
Chemistry
Biology and Medical
Earth Sciences
Computer Science
Computing and Technology
DIY Projects
Menu
Log in
Register
Navigation
More options
Contact us
Close Menu
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Forums
Other Sciences
Programming and Computer Science
Python "ImportError: bad magic number ...."
Reply to thread
Message
[QUOTE="fishturtle1, post: 6616026, member: 606256"] [code=python] # Test suite for Problem Set 3 (Simulating Robots) # Fall 2016 import sys import threading import traceback import unittest import random import imp test = imp.load_compiled("test", "test.pyc") import ps3 def xyrange(x_upper_bound, y_upper_bound): """ Returns the cartesian product of range(x_upper_bound) and range(y_upper_bound). Useful for iterating over the tuple coordinates of a room """ for x in range(x_upper_bound): for y in range(y_upper_bound): yield (x, y) # these are the room tile xy tuples class ps3_P1A(unittest.TestCase): """test the RectangularRoom abstract base class""" def test_unimplemented_methods(self): """Test if student implemented methods in RectangularRoom abstract class that should not be implemented""" room = ps3.RectangularRoom(2,2,1) self.assertRaises(NotImplementedError, room.get_num_tiles) pos = test.Position(1,1) self.assertRaises(NotImplementedError, room.is_position_valid, pos) self.assertRaises(NotImplementedError, room.get_random_position) def test_room_dirt_dirty(self): """ Can fail either because get_dirt_amount is working incorrectly OR the student is initializing the dirt amount incorrectly """ width, height, dirt_amount = (3, 4, 1) room = ps3.RectangularRoom(width, height, dirt_amount) for x, y in xyrange(width, height): self.assertEquals(room.get_dirt_amount(x, y),dirt_amount, "Tile {} was not initialized with correct dirt amount".format((x, y)) ) def test_room_dirt_clean(self): """ Can fail either because get_dirt_amount is working incorrectly OR the student is initializing the dirt amount incorrectly """ width, height, dirt_amount = (3, 4, 0) room = ps3.RectangularRoom(width, height, dirt_amount) for x, y in xyrange(width, height): self.assertEquals(room.get_dirt_amount(x, y),dirt_amount, "Tile {} was not initialized with correct dirt amount".format((x, y)) ) def test_is_tile_cleaned_dirty(self): """ Test is_tile_cleaned""" width, height, dirt_amount = (3, 4, 1) room = ps3.RectangularRoom(width, height, dirt_amount) # Check all squares are unclean at start, given initial dirt > 1 for x, y in xyrange(width, height): self.assertFalse(room.is_tile_cleaned(x, y), "Unclean tile {} was returned as clean".format((x, y)) ) def test_is_tile_cleaned_clean(self): """ Test is_tile_cleaned""" width, height, dirt_amount = (3, 4, 0) room = ps3.RectangularRoom(width, height, dirt_amount) # Check all squares are unclean at start, given initial dirt > 1 for x, y in xyrange(width, height): self.assertTrue(room.is_tile_cleaned(x, y), "Unclean tile {} was returned as clean".format((x, y)) ) def test_clean_tile_at_position_PosToZero(self): """ Test if clean_tile_at_position removes all dirt""" width, height, dirt_amount = (3, 4, 1) room = ps3.RectangularRoom(width, height, dirt_amount) # Clean the tiles and confirm they are marked as clean for x, y in xyrange(width, height): room.clean_tile_at_position(test.Position(x + random.random(), y + random.random()), dirt_amount) # using random.random in case there is any issue with specific parts of a tile for x, y in xyrange(width, height): self.assertTrue(room.is_tile_cleaned(x, y), "Clean tile {} was not marked clean".format((x, y)) ) def test_clean_tile_at_position_PosToPos(self): """ Test if clean_tile_at_position removes all dirt""" width, height, dirt_amount = (3, 4, 2) room = ps3.RectangularRoom(width, height, dirt_amount) # Clean the tiles and confirm they are marked as clean for x, y in xyrange(width, height): room.clean_tile_at_position(test.Position(x + random.random(), y + random.random()), dirt_amount - 1) # using random.random in case there is any issue with specific parts of a tile for x, y in xyrange(width, height): self.assertFalse(room.is_tile_cleaned(x, y), "Unclean tile {} was marked clean".format((x, y)) ) def test_clean_tile_at_position_ZeroToZero(self): """ Test if clean_tile_at_position removes all dirt""" width, height, dirt_amount = (3, 4, 0) room = ps3.RectangularRoom(width, height, dirt_amount) # Clean the tiles and confirm they are marked as clean for x, y in xyrange(width, height): room.clean_tile_at_position(test.Position(x + random.random(), y + random.random()), 1) # using random.random in case there is any issue with specific parts of a tile for x, y in xyrange(width, height): self.assertTrue(room.is_tile_cleaned(x, y), "Clean tile {} was marked clean, no negative dirt allowed".format((x, y)) ) def test_get_num_cleaned_tiles_FullIn1(self): "Test get_num_cleaned_tiles for cleaning subset of room completely with 1 call" width, height, dirt_amount = (3, 4, 1) room = ps3.RectangularRoom(width, height, dirt_amount) cleaned_tiles = 0 # Clean some tiles for x, y in xyrange(width-1, height-1): room.clean_tile_at_position(test.Position(x + random.random(), y + random.random()), 1) cleaned_tiles += 1 num_cleaned = room.get_num_cleaned_tiles() self.assertEqual(num_cleaned, cleaned_tiles, "Number of clean tiles is incorrect: expected {}, got {}".format(cleaned_tiles, num_cleaned) ) def test_get_num_cleaned_tiles_Partial(self): "Test get_num_cleaned_tiles for cleaning subset of room incompletely" width, height, dirt_amount = (3, 4, 2) room = ps3.RectangularRoom(width, height, dirt_amount) cleaned_tiles = 0 # Clean some tiles for x, y in xyrange(width-1, height-1): room.clean_tile_at_position(test.Position(x + random.random(), y + random.random()), 1) num_cleaned = room.get_num_cleaned_tiles() self.assertEqual(num_cleaned, cleaned_tiles, "Number of clean tiles is incorrect: expected {}, got {}".format(cleaned_tiles, num_cleaned) ) def test_get_num_cleaned_tiles_FullIn2(self): """Test get_num_cleaned_tiles for cleaning subset of room in two calls""" width, height, dirt_amount = (3, 4, 2) room = ps3.RectangularRoom(width, height, dirt_amount) cleaned_tiles = 0 # Clean some tiles for x, y in xyrange(width-1, height-1): room.clean_tile_at_position(test.Position(x + random.random(), y + random.random()), 1) room.clean_tile_at_position(test.Position(x + random.random(), y + random.random()), 1) cleaned_tiles += 1 num_cleaned = room.get_num_cleaned_tiles() self.assertEqual(num_cleaned, cleaned_tiles, "Number of clean tiles is incorrect: expected {}, got {}".format(cleaned_tiles, num_cleaned) ) def test_get_num_cleaned_tiles_OverClean(self): "Test cleaning already clean tiles does not increment counter" width, height, dirt_amount = (3, 4, 2) room = ps3.RectangularRoom(width, height, dirt_amount) # clean all of the tiles in the room for x, y in xyrange(width, height): room.clean_tile_at_position(test.Position(x + random.random(), y + random.random()), dirt_amount) for x, y in xyrange(width, height): room.clean_tile_at_position(test.Position(x + random.random(), y + random.random()), 1) num_cleaned = room.get_num_cleaned_tiles() self.assertEqual(num_cleaned, width * height, "Number of clean tiles is incorrect: re-cleaning cleaned tiles must not increase number of cleaned tiles" ) def test_is_position_in_room(self): "Test is_position_in_room" width, height, dirt_amount = (3, 4, 2) room = ps3.RectangularRoom(width, height, dirt_amount) solution_room = test.RectangularRoom(width, height, dirt_amount) for x in [0.0, -0.1, width - 0.1, width, width + 0.1]: for y in [0.0, -0.1, height - 0.1, height, height + 0.1]: pos = test.Position(x, y) self.assertEquals(solution_room.is_position_in_room(pos),room.is_position_in_room(pos), "position {},{} is incorrect: expected {}, got {}".format(x, y, solution_room.is_position_in_room(pos), room.is_position_in_room(pos)) ) class ps3_P1B(unittest.TestCase): """test the Robot abstract base class""" def test_unimplemented_methods(self): """Test if student implemented methods in Robot abstract class that should not be implemented""" room = test.EmptyRoom(2,2,1) robot = ps3.Robot(room,1,1) self.assertRaises(NotImplementedError, robot.update_position_and_clean) def test_getset_robot_direction(self): """Test get_robot_direction and set_robot_direction""" # instantiate EmptyRoom from solutions for testing width, height, dirt_amount = (3, 4, 2) solution_room = test.EmptyRoom(width, height, dirt_amount) robots = [ps3.Robot(solution_room, 1.0, 1) for i in range(4)] directions = [1, 333, 105, 75, 74.3] for dir_index, robot in enumerate(robots): robot.set_robot_direction(directions[dir_index]) for dir_index, robot in enumerate(robots): robot_dir = robot.get_robot_direction() self.assertEquals(robot_dir, directions[dir_index], "Robot direction set or retrieved incorrectly: expected {}, got {}".format(directions[dir_index], robot_dir) ) class ps3_P2_ER(unittest.TestCase): """test the EmptyRoom subclass""" def test_get_random_position(self): """Test get_random_position checks for distribution of positions and validity of positions """ width, height, dirt_amount = (5, 10, 1) room = ps3.EmptyRoom(width, height, dirt_amount) sol_room = test.EmptyRoom(width, height, dirt_amount) freq_buckets = {} for i in range(50000): pos = room.get_random_position() # confirm from test that this is a valid position self.assertTrue(sol_room.is_position_valid(pos)) try: x, y = pos.get_x(), pos.get_y() except AttributeError: self.fail("get_random_position returned {} which is not a Position".format(pos)) self.assertTrue(0 <= x < width and 0 <= y < height, "get_random_position returned {} which is not in [0, {}), [0, {})".format(pos,width,height)) x0, y0 = int(x), int(y) freq_buckets[(x0, y0)] = freq_buckets.get((x0, y0), 0) + 1 for t in xyrange(width, height): num_in_bucket = freq_buckets.get(t, 0) self.assertTrue( # This is a 99.7% confidence interval for a uniform # distribution. Fail if the total of any bucket falls outside # this range. 865 < num_in_bucket < 1135, "The distribution of positions from get_random_position " "looks incorrect (it should be uniform)") def test_get_num_tiles(self): """ test get_num_tiles method""" for i in range(10): width, height, dirt_amount = (random.randint(1,10), random.randint(1,10), 1) room_num_tiles = ps3.EmptyRoom(width, height, dirt_amount).get_num_tiles() sol_room_tiles = ps3.EmptyRoom(width, height, dirt_amount).get_num_tiles() self.assertEquals(room_num_tiles, sol_room_tiles, "student code number of room tiles = {}, not equal to solution code num tiles {}".format(room_num_tiles, sol_room_tiles) ) def test_is_position_valid(self): """ Test is_position_valid this should be refactored as it's mostly a copy of is_position_in_room code """ width, height, dirt_amount = (3, 4, 2) room = ps3.EmptyRoom(width, height, dirt_amount) solution_room = test.EmptyRoom(width, height, dirt_amount) for x in [0.0, -0.1, width - 0.1, width, width + 0.1]: for y in [0.0, -0.1, height - 0.1, height, height + 0.1]: pos = test.Position(x, y) self.assertEquals(solution_room.is_position_valid(pos), room.is_position_valid(pos), "student code and solution code disagree on whether position is valid" ) class ps3_P2_FR(unittest.TestCase): """tests the FurnishedRoom subclass """ def test_is_tile_furnished(self): """ test is_tile_furnished """ for trial in range(5): width, height, dirt_amount = (random.randint(2, 8), random.randint(2, 8), 1) # create room using student's class, set furniture tiles for solution class room = ps3.FurnishedRoom(width, height, dirt_amount) room.add_furniture_to_room() sol_room = test.FurnishedRoom(width, height, dirt_amount) # this relies on knowing the underlying details of the class sol_room.furniture_tiles = room.furniture_tiles for x,y in xyrange(width,height): self.assertEquals(room.is_tile_furnished(x,y),sol_room.is_tile_furnished(x,y), "student code and solution code disagree on whether tile is furnished" ) def test_is_position_furnished(self): """ test_is_position_furnished """ for trial in range(5): width, height, dirt_amount = (random.randint(2, 8), random.randint(2, 8), 1) # create room using student's class, set furniture tiles for solution class room = ps3.FurnishedRoom(width, height, dirt_amount) room.add_furniture_to_room() sol_room = test.FurnishedRoom(width, height, dirt_amount) # this relies on knowing the underlying details of the class sol_room.furniture_tiles = room.furniture_tiles for x,y in xyrange(width,height): pos = test.Position(x + random.random(), y + random.random()) self.assertEquals(room.is_position_furnished(pos),sol_room.is_position_furnished(pos), "student code and solution code disagree on whether position is furnished" ) def test_is_position_valid(self): """ Test is_position_valid """ for trial in range(5): width, height, dirt_amount = (3, 4, 2) room = ps3.FurnishedRoom(width, height, dirt_amount) room.add_furniture_to_room() sol_room = test.FurnishedRoom(width, height, dirt_amount) sol_room.furniture_tiles = room.furniture_tiles for x in [0.0, -0.1, width - 0.1, width, width + 0.1, room.furniture_tiles[0][0] + 0.3]: for y in [0.0, -0.1, height - 0.1, height, height + 0.1, room.furniture_tiles[0][1] + 0.3]: pos = test.Position(x, y) self.assertEquals(sol_room.is_position_valid(pos), room.is_position_valid(pos), "student code and solution code disagree on whether position is valid" ) def test_get_num_tiles(self): """ test get_num_tiles method should refactor - is mostly copy of EmptyRoom test """ for i in range(10): width, height, dirt_amount = (random.randint(2,10), random.randint(2,10), 1) # instanciate student's room room = ps3.FurnishedRoom(width, height, dirt_amount) room.add_furniture_to_room() # instanciate solution's room based on student's furniture sol_room = ps3.FurnishedRoom(width, height, dirt_amount) sol_room.furniture_tiles = room.furniture_tiles # generate answers room_num_tiles = room.get_num_tiles() sol_room_num_tiles = sol_room.get_num_tiles() self.assertEquals(room_num_tiles, sol_room_num_tiles, "student code number of room tiles = {}, not equal to solution code num tiles {}".format(room_num_tiles, sol_room_num_tiles) ) def test_get_random_position(self): """Test get_random_position for FurnishedRoom tests for validity of positions - could add distribution checking similar to empty room """ width, height, dirt_amount = (5, 10, 1) # instanciate student's room room = ps3.FurnishedRoom(width, height, dirt_amount) room.add_furniture_to_room() # instanciate solution's room based on student's furniture sol_room = ps3.FurnishedRoom(width, height, dirt_amount) sol_room.furniture_tiles = room.furniture_tiles for i in range(50000): pos = room.get_random_position() self.assertTrue(sol_room.is_position_valid(pos)) class ps3_P3(unittest.TestCase): """This tests EmptyRoom and Standard robot in various ways""" def createRoomAndRobots(self, num_robots): r = ps3.EmptyRoom(5, 7, 1) robots = [ps3.StandardRobot(r, 1.0, 1) for i in range(num_robots)] return r, robots def test_BoundaryConditions(self): "Test strict inequalities in random positions for the EmptyRoom and StandardRobot" for m in range(7000): r, robots = self.createRoomAndRobots(4) for r in robots: p = r.get_robot_position() d = r.get_robot_direction() try: x, y = p.get_x(), p.get_y() except AttributeError: self.fail("get_robot_position returned %r which is not a Position" % (p,)) self.assertTrue(x < 5 and y < 7, "Robot position was set to %r, " "which is not in [0, 5), [0, 7)" % ((p.get_x(), p.get_y()),)) self.assertTrue(0 <= d < 360, "Robot direction was set to %r, " "which is not in [0, 360)" % (d,)) def testRobot(self): "Test StandardRobot" pos_buckets = {} dir_buckets = {} skip_pos_distribution_test = False for m in range(7000): r, robots = self.createRoomAndRobots(4) for r in robots: p = r.get_robot_position() d = r.get_robot_direction() try: x, y = p.get_x(), p.get_y() except AttributeError: self.fail("get_robot_position returned %r which is not a Position" % (p,)) self.assertTrue(0 <= x <= 5 and 0 <= y <= 7, "Robot position was set to %r, " "which is not in [0, 5), [0, 7)" % ((p.get_x(), p.get_y()),)) self.assertTrue(0 <= d <= 360, "Robot direction was set to %r, " "which is not in [0, 360)" % (d,)) x0, y0 = int(p.get_x()), int(p.get_y()) pos_buckets[(x0, y0)] = pos_buckets.get((x0, y0), 0) + 1 dir_buckets[int(d / 10)] = dir_buckets.get(int(d / 10), 0) + 1 # Test that positions are correctly distributed if not skip_pos_distribution_test: for t in xyrange(5, 7): num_in_bucket = pos_buckets.get(t, 0) self.assertTrue( 685 < num_in_bucket < 915, "The distribution of positions on new Robot objects " "looks incorrect (it should be uniform)") # Test that directions are correctly distributed for t in range(36): num_in_bucket = dir_buckets.get(t, 0) self.assertTrue( 658 < num_in_bucket < 898, "The distribution of positions from get_random_position " "looks incorrect (it should be uniform)") def test_update_position_and_cleanStandardRobot(self): "Test StandardRobot.update_position_and_clean" r = ps3.EmptyRoom(3, 5, 1) robot = ps3.StandardRobot(r, 1.0, 1) robot.set_robot_position(test.Position(1.5, 2.5)) robot.set_robot_direction(90) robot.update_position_and_clean() self.assertEquals(robot.get_robot_direction(), 90, "Robot direction is updated incorrectly by update_position_and_clean: expected %r, got %r" % (90, robot.get_robot_direction())) # check if robot position is valid robotPos = robot.get_robot_position() correctPos = test.Position(2.5, 2.5) self.assertTrue(robotPos.get_x() == correctPos.get_x() and robotPos.get_y() == correctPos.get_y(), "Robot position is updated incorrectly by update_position_and_clean: expected %r, got %r" % (ps3.Position(2.5, 2.5), robot.get_robot_position())) self.assertTrue(2>=r.get_num_cleaned_tiles() >= 1, "update_position_and_clean should have marked one or two tiles as clean") self.assertTrue(r.is_tile_cleaned(1, 2) or r.is_tile_cleaned(2, 2), "update_position_and_clean should have marked either (1, 2) or (2, 2) as clean") # Simulate a lot of time passing... for i in range(20): robot.update_position_and_clean() self.assertTrue(r.is_position_in_room(robot.get_robot_position()), "Robot position %r is not in room!" % (robot.get_robot_position(),)) self.assertNotEquals(robot.get_robot_direction(), 90, "Robot direction should have been changed in update_position_and_clean") self.assertTrue(r.get_num_cleaned_tiles() >= 1, "update_position_and_clean should have marked another tile as clean") """The SIMULATION_TIME_LIMIT, SimulationThread class and SimulationTester class are all designed to help test various simulations for problems 4 and 5 Right now there is no testing for the FurnishedRoom simulation, because the furniture is set up randomly. In future psets it may make sense to manually empirically establish reasonable simulation bounds for specified furniture setups. If the student has implemented the FurnishedRoom methods correctly and passes the tests for StandardRobot and EmptyRoom, there should not be any additional issue. """ SIMULATION_TIME_LIMIT = 75.0 class SimulationThread(threading.Thread): def __init__(self, *args): threading.Thread.__init__(self) self.result = None self.exception_info = None self.args = args def run(self): try: self.result = ps3.run_simulation(*self.args) except Exception: self.exception_info = sys.exc_info() def getResult(self): return self.result def getExceptionInfo(self): return self.exception_info class SimulationTester(unittest.TestCase): def run_simulation(self, bounds, parameters): """ Tests ps3.run_simulation. The number of time-steps ps3.run_simulation takes must fall between any of the (LOWER, UPPER) bound tuples inside bounds. ps3.run_simulation must also finish within a timelimit to be considered passing. Threads are used to time a simulation. bounds: tuple of (lower, upper) bounds on the number of steps a simulation should take. parameters: parameters to be passed into ps3.run_simulation """ thr = SimulationThread(*parameters) # Set daemon flag, so we can quit the test even if simulation threads # are still running thr.setDaemon(True) thr.start() # Allow SIMULATION_TIME_LIMIT seconds for test to finish thr.join(SIMULATION_TIME_LIMIT) if thr.isAlive(): self.fail("Simulation took too long (more than %d seconds)" % SIMULATION_TIME_LIMIT) elif thr.getExceptionInfo(): self.fail("Exception occurred in simulation thread:\n\n%s" % "".join(traceback.format_exception(*thr.getExceptionInfo()))) else: actual = thr.getResult() intervals_str = " or ".join([("[%.1f, %.1f]" % b) for b in bounds]) self.assertTrue( any([LB < actual < UB for LB, UB in bounds]), "Simulation output was outside of 99.7%% confidence interval!\n" "Robots: %d; Speed: %.1f; Capacity: %d; Dimensions: %dx%d; " "Dirt Amount: %d; Coverage: %.2f; Trials: %d; Robot type: %r\n" "Actual output: %r; acceptable intervals: %s" % (parameters + (actual, intervals_str))) class ps3_P5_Standard(SimulationTester): """test the simulation time cleaning the EmptyRoom with a StandardRobot""" def testSimulation1(self): "Test cleaning 100% of a 5x5 room" try: self.run_simulation(((142, 173),), (1, 1.0, 1, 5, 5, 1, 1.0, 100, ps3.StandardRobot)) except: print ("Unexpected error:", sys.exc_info()[1]) raise def testSimulation2(self): "Test cleaning 75% of a 10x10 room (Standard Robot)" self.run_simulation(((183, 198),), (1, 1.0, 1, 10, 10, 1, 0.75, 100, ps3.StandardRobot)) def testSimulation3(self): "Test cleaning 90% of a 10x10 room (Standard Robot)" self.run_simulation(((298, 327),), (1, 1.0, 1, 10, 10, 1, 0.9, 100, ps3.StandardRobot)) def testSimulation4(self): "Test multiple robots (95% of a 20x20 room with 5 robots (Standard Robot))" self.run_simulation(((289, 303),), (5, 1.0, 1, 20, 20, 1, 0.95, 100, ps3.StandardRobot)) def testSimulation5(self): "Test different speeds (90% of a 5x20 room with a robot of speed 0.2 (Standard Robot))" self.run_simulation(((1095, 1228),), (1, 0.2, 1, 5, 20, 1, 0.9, 100, ps3.StandardRobot)) def testSimulation6(self): "Test multiple robots and different speeds (90% of a 10x10 room with 3 robots of speed 0.5 (Standard Robot))" self.run_simulation(((155, 180),), (3, 0.5, 1, 10, 10, 1, 0.9, 100, ps3.StandardRobot)) # new tests below here def testSimulation7(self): "Test cleaning 100% of a 5x5 room (Standard Robot, 5 dirt/tile, capcity = 3)" self.run_simulation(((206, 266),(180, 240)), (1, 1.0, 3, 5, 5, 5, 1.0, 100, ps3.StandardRobot)) def testSimulation8(self): "Test cleaning 100% of a 5x5 room (Standard Robot, 6 dirt/tile, capacity = 3)" self.run_simulation(((206, 266),(180, 240)), (1, 1.0, 3, 5, 5, 6, 1.0, 100, ps3.StandardRobot)) def testSimulation9(self): """Test different speeds (90% of a 3x10 room with a robot of speed 0.2 (Standard Robot)), capacity = 2, 6 dirt/tile""" self.run_simulation(((387, 447),(384, 444)), (1, 0.2, 2, 3, 10, 6, 0.9, 100, ps3.StandardRobot)) def testSimulation10(self): "Test multiple robots (95% of a 10x10 room with 5 robots (Standard Robot)) capacity = 2, 6 dirt/tile" self.run_simulation(((137, 198),(130, 190)), (5, 1.0, 2, 10, 10, 6, 0.95, 100, ps3.StandardRobot)) def testSimulation11(self): """Test multiple robots and different speeds (90% of a 5x5 room with 3 robots of speed 0.5 (Standard Robot)), capacity = 2, 6 dirt/tile""" self.run_simulation(((48, 108), (45, 104)), (3, 0.5, 2, 5, 5, 6, 0.9, 100, ps3.StandardRobot)) class ps3_P5_Faulty(SimulationTester): """test the simulation time cleaning the EmptyRoom with a FaultyRobot""" def testSimulation1(self): "Test cleaning 100% of a 5x5 room with FaultyRobot" x = ps3.run_simulation(1, 1.0, 1, 5, 5, 1, 1.0, 100, ps3.FaultyRobot) self.assertTrue(125 <= x <= 275, "Simulation output was outside of 99.7% confidence interval!\n") def testSimulation2(self): "Test cleaning 75% of a 10x10 room with FaultyRobot" x = ps3.run_simulation(1, 1.0, 1, 10, 10, 1, 0.75, 100, ps3.FaultyRobot) self.assertTrue(210 <= x <=260, "Simulation output was outside of 99.7% confidence interval! Took " + str(x) + " steps\n") def testSimulation3(self): "Test cleaning 90% of a 10x10 room with FaultyRobot" x = ps3.run_simulation(1, 1.0, 1, 10, 10, 1, 0.9, 100, ps3.FaultyRobot) self.assertTrue(360 <= x <=415, "Simulation output was outside of 99.7% confidence interval! Took " + str(x) + " steps\n") def testSimulation4(self): "Test cleaning 100% of a 5x5 room with FaultyRobot" x = ps3.run_simulation(2, 1.0, 2, 5, 5, 5, 1.0, 100, ps3.FaultyRobot) self.assertTrue(160 <= x <=200, "Simulation output was outside of 99.7% confidence interval! Took " + str(x) + " steps\n") def testSimulation5(self): "Test cleaning 75% of a 10x10 room with FaultyRobot" x = ps3.run_simulation(4, 1.0, 3, 10, 10, 5, 0.75, 100, ps3.FaultyRobot) self.assertTrue(101 <= x <=116, "Simulation output was outside of 99.7% confidence interval! Took " + str(x) + " steps\n") def testSimulation6(self): "Test cleaning 90% of a 10x10 room with FaultyRobot" x = ps3.run_simulation(5, 1.0, 3, 10, 10, 10, 0.9, 100, ps3.FaultyRobot) self.assertTrue(205 <= x <=225, "Simulation output was outside of 99.7% confidence interval! Took " + str(x) + " steps\n") if __name__ == "__main__": suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(ps3_P1A)) suite.addTest(unittest.makeSuite(ps3_P1B)) suite.addTest(unittest.makeSuite(ps3_P2_ER)) suite.addTest(unittest.makeSuite(ps3_P2_FR)) suite.addTest(unittest.makeSuite(ps3_P3)) suite.addTest(unittest.makeSuite(ps3_P5_Standard)) suite.addTest(unittest.makeSuite(ps3_P5_Faulty)) unittest.TextTestRunner(verbosity=3).run(suite) [/code]When run in Python 2.7.10: ImportError: Bad magic number in test.pyc When run in Python 3.9.5: ImportError: bad magic number in 'test': b'\x16\r\r\n' I think the error occurs at line 11. I think this means I need to use a different version of Python, but I'm not sure how to determine which version. Is there a way to fix this? [/QUOTE]
Insert quotes…
Post reply
Forums
Other Sciences
Programming and Computer Science
Python "ImportError: bad magic number ...."
Back
Top