Skip to content
27 changes: 14 additions & 13 deletions source/sgp_mode/SGPWorldSetup.cc
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,6 @@ void SGPWorld::SetupChangingEnvironment() {
andn_task_id = task_env.GetTaskSet().GetID("and_not");
}


size_t orn_task_id = task_env.GetTaskSet().GetSize();
if (task_env.GetTaskSet().HasTask("OR_NOT")) {
orn_task_id = task_env.GetTaskSet().GetID("OR_NOT");
Expand Down Expand Up @@ -157,34 +156,36 @@ void SGPWorld::SetupChangingEnvironment() {
}

// update 0 will flip not-and-or to rewarded and nand-andn-orn to punished
Comment thread
LaurenC267 marked this conversation as resolved.
Outdated
GetTaskEnv().GetHostTaskReq(not_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(not_task_id).task_value;
GetTaskEnv().GetSymTaskReq(not_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(not_task_id).task_value;
GetTaskEnv().GetHostTaskReq(nand_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(nand_task_id).task_value;
GetTaskEnv().GetSymTaskReq(nand_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(nand_task_id).task_value;

GetTaskEnv().GetHostTaskReq(and_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(and_task_id).task_value;
GetTaskEnv().GetSymTaskReq(and_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(and_task_id).task_value;
GetTaskEnv().GetHostTaskReq(andn_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(andn_task_id).task_value;
GetTaskEnv().GetSymTaskReq(andn_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(andn_task_id).task_value;

GetTaskEnv().GetHostTaskReq(or_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(or_task_id).task_value;
GetTaskEnv().GetSymTaskReq(or_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(or_task_id).task_value;
GetTaskEnv().GetHostTaskReq(orn_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(orn_task_id).task_value;
GetTaskEnv().GetSymTaskReq(orn_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(orn_task_id).task_value;

begin_update_sig.AddAction(
[this, nand_task_id, andn_task_id, orn_task_id, not_task_id, and_task_id, or_task_id]() {
if (GetUpdate() % sgp_config.TEMP_CHANGING_ENVIRONMENT_INTERVAL() == 0) {
GetTaskEnv().GetHostTaskReq(nand_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(nand_task_id).task_value;
Comment thread
LaurenC267 marked this conversation as resolved.
GetTaskEnv().GetHostTaskReq(andn_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(andn_task_id).task_value;
GetTaskEnv().GetHostTaskReq(orn_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(orn_task_id).task_value;

GetTaskEnv().GetHostTaskReq(not_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(not_task_id).task_value;
GetTaskEnv().GetHostTaskReq(and_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(and_task_id).task_value;
GetTaskEnv().GetHostTaskReq(or_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(or_task_id).task_value;

GetTaskEnv().GetHostTaskReq(nand_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(nand_task_id).task_value;
GetTaskEnv().GetHostTaskReq(andn_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(andn_task_id).task_value;
GetTaskEnv().GetHostTaskReq(orn_task_id).task_value = -1 * GetTaskEnv().GetHostTaskReq(orn_task_id).task_value;

GetTaskEnv().GetSymTaskReq(not_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(not_task_id).task_value;
GetTaskEnv().GetSymTaskReq(and_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(and_task_id).task_value;
GetTaskEnv().GetSymTaskReq(or_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(or_task_id).task_value;

GetTaskEnv().GetSymTaskReq(nand_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(nand_task_id).task_value;
GetTaskEnv().GetSymTaskReq(andn_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(andn_task_id).task_value;
GetTaskEnv().GetSymTaskReq(orn_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(orn_task_id).task_value;

GetTaskEnv().GetSymTaskReq(not_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(not_task_id).task_value;
GetTaskEnv().GetSymTaskReq(and_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(and_task_id).task_value;
GetTaskEnv().GetSymTaskReq(or_task_id).task_value = -1 * GetTaskEnv().GetSymTaskReq(or_task_id).task_value;

}
}
);
Expand Down
30 changes: 16 additions & 14 deletions source/test/sgp_mode_test/functional_tests/SenseTask_Tasks.test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -50,17 +50,17 @@ TEST_CASE("Test host SenseTask instruction after a rewarded task", "[sgp]"){
host_hw.SetProgram(host_program);
world.AssignNewEnvIO(host_hw.GetCPUState());

// NOT is currently rewarded.
REQUIRE(world.GetTaskEnv().GetHostTaskReq(not_task_id).task_value > 0);
// NOT is currently not rewarded.
REQUIRE(world.GetTaskEnv().GetHostTaskReq(not_task_id).task_value < 0);

// Initial register values
host_hw.SetRegisters({3, 2, 5});

// Run host program
host_hw.RunCPUStep(4);

THEN("SenseTask puts a 1 into register 1"){
REQUIRE(host_hw.GetRegister(1) == 1);
THEN("SenseTask puts a 0 into register 1"){
Comment thread
anyaevostinar marked this conversation as resolved.
REQUIRE(host_hw.GetRegister(1) == 0);//what should these values be
Comment thread
LaurenC267 marked this conversation as resolved.
Outdated
}
}
}
Expand Down Expand Up @@ -101,17 +101,19 @@ TEST_CASE("Test host SenseTask instruction after a punished task", "[sgp]"){
host_hw.SetProgram(host_program);
world.AssignNewEnvIO(host_hw.GetCPUState());

// NAND is currently punished.
REQUIRE(world.GetTaskEnv().GetHostTaskReq(nand_task_id).task_value < 0);
// NAND is not currently punished.
REQUIRE(world.GetTaskEnv().GetHostTaskReq(nand_task_id).task_value > 0);



// Initial register values
host_hw.SetRegisters({7, 12, 9});

// Run host program
host_hw.RunCPUStep(5);

THEN("SenseTask puts a 0 into register 1"){
REQUIRE(host_hw.GetRegister(1) == 0);
THEN("SenseTask puts a 1 into register 1"){
REQUIRE(host_hw.GetRegister(1) == 1);
}
}
}
Expand Down Expand Up @@ -150,16 +152,16 @@ TEST_CASE("Test symbiont SenseTask instruction after a rewarded task", "[sgp]"){
world.AssignNewEnvIO(sym_hw.GetCPUState());

// NOT is currently rewarded.
REQUIRE(world.GetTaskEnv().GetHostTaskReq(not_task_id).task_value > 0);
REQUIRE(world.GetTaskEnv().GetHostTaskReq(not_task_id).task_value < 0);

// Initial register values
sym_hw.SetRegisters({3, 2, 5});

// Run symbiont program
sym_hw.RunCPUStep(4);

THEN("SenseTask puts a 1 into register 1"){
REQUIRE(sym_hw.GetRegister(1) == 1);
THEN("SenseTask puts a 0 into register 1"){
REQUIRE(sym_hw.GetRegister(1) == 0);
}
}
}
Expand Down Expand Up @@ -199,16 +201,16 @@ TEST_CASE("Test symbiont SenseTask instruction after a punished task", "[sgp]"){
world.AssignNewEnvIO(sym_hw.GetCPUState());

// NAND is currently punished.
REQUIRE(world.GetTaskEnv().GetHostTaskReq(nand_task_id).task_value < 0);
REQUIRE(world.GetTaskEnv().GetHostTaskReq(nand_task_id).task_value > 0);

// Initial register values
sym_hw.SetRegisters({7, 12, 9});

// run symbiont program
sym_hw.RunCPUStep(5);

THEN("SenseTask puts a 0 into register 1"){
REQUIRE(sym_hw.GetRegister(1) == 0);
THEN("SenseTask puts a 1 into register 1"){
REQUIRE(sym_hw.GetRegister(1) == 1);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -172,18 +172,18 @@ TEST_CASE("Hosts start with a punished task in a temporally changing environment
world.Update();
size_t host_orn_count = world.GetHostTaskSuccesses().at(or_not_task_id);

THEN("The host initially loses points for completing its task") {
THEN("The host initially gains points for completing its task") {
REQUIRE(host_orn_count == 1);
REQUIRE(host_orn_only->GetPoints() == -5);
REQUIRE(host_orn_only->GetPoints() == 5);
}

// event update
world.Update();
host_orn_count += world.GetHostTaskSuccesses().at(or_not_task_id);

THEN("After the environment changes, the host gains points for completing its task") {
THEN("After the environment changes, the host loses points for completing its task") {
REQUIRE(host_orn_count == 3);
REQUIRE(host_orn_only->GetPoints() == 5);
REQUIRE(host_orn_only->GetPoints() == -5);
}
}
}
Expand Down Expand Up @@ -230,18 +230,18 @@ TEST_CASE("Symbionts start with a punished task in a temporally changing environ
world.Update();
size_t sym_nand_count = world.GetSymTaskSuccesses().at(nand_task_id);

THEN("The symbiont initially loses points for completing its task") {
THEN("The symbiont initially gains points for completing its task") {
REQUIRE(sym_nand_count == 1);
REQUIRE(symbiont_nand_only->GetPoints() == -5);
REQUIRE(symbiont_nand_only->GetPoints() == 5);
}

// event update
world.Update();
sym_nand_count += world.GetSymTaskSuccesses().at(nand_task_id);

THEN("After the environment changes, the symbiont gains points for completing its tasks") {
THEN("After the environment changes, the symbiont loses points for completing its tasks") {
REQUIRE(sym_nand_count == 3);
REQUIRE(symbiont_nand_only->GetPoints() == 5);
REQUIRE(symbiont_nand_only->GetPoints() == -5);
}
}
}