예제 #1
0
bool Partitioner::hasSamePartitionLocation(const Partitioner & target_partition )const{
	if(mode_==OneToMany||target_partition.get_binding_mode_()==OneToMany){
		/** in the current version, any the location detection in OneToMany mode is ommited.*/
		return false;
	}
	if(getNumberOfPartitions()!=target_partition.getNumberOfPartitions())
		return false;
	for(unsigned i=0;i<getNumberOfPartitions();i++){
		if(!partition_info_list[i]->is_colocated(*target_partition.partition_info_list[i])){
			return false;
		}
	}
	return true;
}
    std::stringstream input;
    input <<
          "2 1 001\n"
          "%: 0\n"
          "2 1\n"
          "%: 1\n"
          "1 1\n";

    int num_parts = 2;

    std::vector<SimulationObject*> objects {new MockObject(), new MockObject()};

    auto pinfo = ProfileGuidedPartitioner(input).partition(&objects, num_parts);

    SECTION("correct number of partitions") {
        REQUIRE(pinfo->getNumberOfPartitions() == num_parts);
    }

    std::vector<SimulationObject*> partitioned_obs;

    for (int i = 0; i < num_parts; ++i) {
        for (auto o : *pinfo->getPartition(i)) {
            partitioned_obs.push_back(o);
        }
    }

    SECTION("all objects contained") {
        REQUIRE(partitioned_obs.size() == objects.size());
    }

    SECTION("all objects valid") {