Example #1
0
    def test_exp_run_controls(self, bp: BasePage, pp: PopulationPage):
        """
        Tests that a simple experiment can be run and that running, pausing, and
        doing one update work as expected.

        :return: None.
        """

        # Add @ancestor to dish.
        bp.add_ancestor_to_dish()

        # Run the experiment.
        bp.run_from_menu()
        bp.util.sleep(3, "Waiting for updates to occur.")

        # Assert that updates have occurred.
        assert pp.get_pop_current_update() > 0
        assert pp.gr_get_pop_current_update() > 0

        # Pause the experiment.
        bp.pause_from_menu()
        bp.util.sleep(1, "Making sure pause goes into effect.")

        # Get current update, wait a few seconds, assert it has not changed.
        current_update = pp.get_pop_current_update()
        bp.util.sleep(3, "Ensuring no updates occur after pause.")
        assert pp.get_pop_current_update() == current_update

        # Do one update
        bp.forward_from_menu()
        bp.util.sleep(1, "Making sure update has time to occur.")
        assert (pp.get_pop_current_update() - current_update) == 1
    def test_startup_pause_settings(self, pp: PopulationPage):
        """
        Tests that pause settings are correct on startup.

        :return: None.
        """

        assert pp.pause_manually_enabled()
        assert not pp.pause_at_update_enabled()
Example #3
0
    def soft_reset(self, closing_assertions, pp: PopulationPage):
        """
        Performs a 'soft reset" at the beginning of an experiment by resetting
        the dish. In the future (when tests with Organism and Analysis window
        are in place) it will also do as much as possible to reset those
        windows.

        * Not Fully Implemented Yet *

        :return:
        """
        yield
        pp.new_exp_discard()
    def test_toggle_pop_stats(self, bp: BasePage, pp: PopulationPage):
        """
        Tests toggling the Population Statistics window on and off.
        
        :return: None. 
        """

        bp.go_to_population()
        pp.show_pop_stats()
        assert pp.pop_stats_displayed()
        pp.hide_pop_stats()
        assert not pp.pop_stats_displayed()
        pp.show_pop_stats()
        assert pp.pop_stats_displayed()
    def test_pause_at_update(self, bp: BasePage, pp: PopulationPage):
        """
        Tests that 'Pause at Update' setting will allow user to automatically
        pause the experiment at the given update.

        :return: None.
        """

        # Setup pause settings.
        pp.enable_pause_at_update()
        pp.edit_pause_update(9)

        # Set up the rest of the experiment.
        bp.add_ancestor_to_dish()

        # Run the experiment.
        bp.run_from_menu()

        # Wait long enough for experiment to have reached update 9.
        bp.util.sleep(10, "Waiting for experiment to pause automatically.")

        # Check that pause worked properly.
        assert pp.get_pop_current_update() == 9

        # Wait to make sure it is paused.
        bp.util.sleep(1, "Ensuring that experiment is paused.")
        assert pp.get_pop_current_update() == 9
    def test_pop_stats_sanity_ancestor(self, bp: BasePage, pp: PopulationPage):
        """
        Tests that running an experiment with @ancestor for a brief period of
        time does not lead to any unexpected values in the population statistics
        window.

        :return: None.
        """

        # Add @ancestor to dish.
        bp.add_ancestor_to_dish()

        # Run the experiment for a while, then pause it.
        bp.run_from_menu()
        bp.util.sleep(15, "Waiting for updates to occur.")
        bp.pause_from_menu()
        bp.util.sleep(1, "Waiting for pause to take affect.")

        # Test that population stats are valid.
        assert pp.get_pop_current_update() > 0
        assert pp.get_pop_num_orgs() > 1
        assert pp.get_pop_avg_fit() >= 0.0
        assert pp.get_pop_avg_energy_rate() > 0
        assert pp.get_pop_avg_offspring_cost() > 0
        assert pp.get_pop_avg_age() >= 0
    def test_check_calcs(self, bp: BasePage, pp: PopulationPage):
        """
        Tests calculation of avg fitness, offspring cost, and energy acq. rate (as well as # of viable orgs).

        :return: None.
        """
        bp.add_ancestor_to_dish()
        pp.run_from_pop()
        bp.util.sleep(10, "Waiting for experiment to run for a while.")
        pp.pause_from_pop()
        bp.util.sleep(10, "Waiting for pause.")
        calculated_values = pp.calculate_pop_averages()

        assert calculated_values[0] == pp.get_pop_current_viable()
        assert abs(calculated_values[1] - pp.get_pop_avg_fit()) < 0.2
        assert abs(calculated_values[2] -
                   pp.get_pop_avg_offspring_cost()) < 0.2
        assert abs(calculated_values[3] - pp.get_pop_avg_energy_rate()) < 0.2
    def test_input_dishsize_str(self, bp: BasePage, pp: PopulationPage):
        """
        Tests that crashes and unexpected behaviors do not occur if a
        non-numeric string is given to the dish size boxes.

        :return: None.
        """

        # Edit dish size with string values.
        pp.show_env_settings()
        pp.edit_dish_cols("sample text")
        pp.hide_env_settings()
        assert pp.check_size_cells_error()

        # Add an organism to the experiment and try to run it.
        bp.add_ancestor_to_dish()
        pp.run_from_pop()

        # Wait for a short period so that response to run attempt occurs.
        bp.util.sleep(3)
    def test_input_mut_over_thousand(self, bp: BasePage, pp: PopulationPage):
        """
        Tests that crashes and unexpected behavior do not occur if bad input is
        given to the population mutation rate boxes.

        :return: None.
        """

        # Edit pop mutation rate with value over 1000.
        pp.show_env_settings()
        pp.edit_mut_rate("5000")
        pp.hide_env_settings()
        assert pp.check_mutation_rate_error()

        # Add an organism to the dish and try to run it.
        bp.click_freezer_item("@ancestor")
        bp.add_org_to_exp()
        pp.run_from_pop()

        # Wait a short period so that response to run attempt occurs.
        bp.util.sleep(3)
    def test_input_dishsize_zero(
        self,
        bp: BasePage,
        pp: PopulationPage,
    ):
        """
        Tests that crashes and unexpected behaviors do not occur if a dish size
        dimension is set to 0.

        :return: None.
        """

        # Edit dish size with value zero.
        pp.show_env_settings()
        pp.edit_dish_cols("0")
        pp.hide_env_settings()
        assert pp.check_size_cells_error()

        # Add an organism to the experiment and try to run it.
        bp.add_ancestor_to_dish()
        pp.run_from_pop()

        # Wait for a short period so that response to run attempt occurs.
        bp.util.sleep(3)
    def test_pop_stats_sanity_allfxns(self, bp: BasePage, pp: PopulationPage):
        """
        Tests that running an experiment with @all_functions does not create
        unexpected values in pop. stats window and that this window shows that
        all of the functions have been performed at least once (which should
        always happen because the starting org can perform all functions).

        :return: None.
        """
        # Add @all_functions to dish.
        bp.add_all_functions_to_dish()

        # Run the experiment for a while, then pause it.
        bp.run_from_menu()
        bp.util.sleep(15, "Waiting for updates to occur.")
        bp.pause_from_menu()
        bp.util.sleep(1, "Waiting for pause to take affect.")

        # Test that population stats are valid.
        assert pp.get_pop_current_update() > 0
        assert pp.get_pop_num_orgs() > 1
        assert pp.get_pop_avg_fit() >= 0.0
        assert pp.get_pop_avg_energy_rate() > 0
        assert pp.get_pop_avg_offspring_cost() > 0
        assert pp.get_pop_avg_age() >= 0

        # Test that all functions have occurred.
        assert pp.get_pop_num_performing_not() > 0
        assert pp.get_pop_num_performing_nan() > 0
        assert pp.get_pop_num_performing_and() > 0
        assert pp.get_pop_num_performing_orn() > 0
        assert pp.get_pop_num_performing_oro() > 0
        assert pp.get_pop_num_performing_ant() > 0
        assert pp.get_pop_num_performing_nor() > 0
        assert pp.get_pop_num_performing_xor() > 0
        assert pp.get_pop_num_performing_equ() > 0
Example #12
0
 def pp(self, driver_setup):
     return PopulationPage(driver_setup)
    def test_toggle_env_settings(self, bp: BasePage, pp: PopulationPage):
        """
        Tests toggling the Environmental Settings panel on and off.
        
        :return: None. 
        """

        bp.go_to_population()
        pp.show_env_settings()
        assert pp.env_settings_displayed()
        assert not pp.grid_displayed()
        pp.hide_env_settings()
        assert not pp.env_settings_displayed()
        assert pp.grid_displayed()
        pp.show_env_settings()
        assert pp.env_settings_displayed()
        assert not pp.grid_displayed()