Program Listing for File pgg.test.cc

Return to documentation for file (source/test/integration_test/multi_infection/pgg.test.cc)

#include "../../../pgg_mode/PGGWorldSetup.cc"


TEST_CASE("Multi-infection results", "[integration]") {
  emp::Random random(29);
  SymConfigBase config;
  PGGWorld world(random, &config);
  config.HOST_INT(0);
  config.SYM_INT(0);
  config.PGG(1);
  config.MUTATION_SIZE(0.05);
  config.UPDATES(2000);
  world.Setup();

  config.GRID_X(5);
  config.GRID_Y(5);

  emp::DataMonitor<double, emp::data::Histogram>& sym_val_node = world.GetHostedSymIntValDataNode();
  emp::DataMonitor<double, emp::data::Histogram>& host_val_node = world.GetHostIntValDataNode();


  WHEN("There are few symbionts per host") {
    config.SYM_LIMIT(1);
    WHEN("Vertical transmission rate is intermediate") {
      config.VERTICAL_TRANSMISSION(0.7);
      world.RunExperiment(false);
      THEN("Mutualism evolves"){
        REQUIRE(sym_val_node.GetMean() > 0.1);
        REQUIRE(host_val_node.GetMean() > 0.1);
      }
    }
    WHEN("Vertical transmission rate is high") {
      config.VERTICAL_TRANSMISSION(1);
      world.RunExperiment(false);
      THEN("Mutualism evolves"){
        REQUIRE(sym_val_node.GetMean() > 0.1);
        REQUIRE(host_val_node.GetMean() > 0.1);
      }
    }
  }
  WHEN("There can be many symbionts per host") {
    config.SYM_LIMIT(10);
    WHEN("Vertical transmission rate is intermediate") {
      config.VERTICAL_TRANSMISSION(0.7);
      world.RunExperiment(false);
      THEN("Mutualism does not evolve") {
        REQUIRE(sym_val_node.GetMean() < -0.1);
        REQUIRE(host_val_node.GetMean() < -0.1);
      }
    }
    WHEN("Vertical transmission rate is high") {
      config.VERTICAL_TRANSMISSION(1);
      world.RunExperiment(false);
      THEN("Mutualism evolves") {
        REQUIRE(sym_val_node.GetMean() > 0.1);
        REQUIRE(host_val_node.GetMean() > 0.1);
      }
    }
  }
}