コード例 #1
0
TEST(ReachabilitySphere, convertToCapability)
{
    Capability capability(CONE, 70.0, 55.0, 25.0);
    
    ReachabilitySphere sphere = createReachabilitySphereFromCapability(capability, 500);

    Capability testCapability = sphere.convertToCapability();

    ASSERT_TRUE(testCapability.getType() == CONE);
    ASSERT_TRUE(std::abs(testCapability.getPhi() - capability.getPhi()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getTheta() - capability.getTheta()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getHalfOpeningAngle() - capability.getHalfOpeningAngle()) < 2.0);
    ASSERT_EQ(0.0, testCapability.getShapeFitError());


    capability = Capability(CYLINDER_1, 70.0, 55.0, 25.0);
    
    sphere = createReachabilitySphereFromCapability(capability, 10000);

    testCapability = sphere.convertToCapability();

    ASSERT_TRUE(testCapability.getType() == CYLINDER_1);
    ASSERT_TRUE(std::abs(testCapability.getPhi() - capability.getPhi()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getTheta() - capability.getTheta()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getHalfOpeningAngle() - capability.getHalfOpeningAngle()) < 2.0);
    // ASSERT_EQ(0.0, testCapability.getShapeFitError());
    // TODO: improve PCA to get correct axis (for now SFE could be 0.0 but is higher)


    capability = Capability(CYLINDER_2, 70.0, 55.0, 25.0);
    
    sphere = createReachabilitySphereFromCapability(capability, 10000);

    testCapability = sphere.convertToCapability();

    ASSERT_TRUE(testCapability.getType() == CYLINDER_2);
    ASSERT_TRUE(std::abs(testCapability.getPhi() - capability.getPhi()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getTheta() - capability.getTheta()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getHalfOpeningAngle() - capability.getHalfOpeningAngle()) < 2.0);
    // ASSERT_EQ(0.0, testCapability.getShapeFitError());
}
コード例 #2
0
ファイル: profiledb.cpp プロジェクト: Ginox/MoSync
bool ProfileDB::internalMatchProfile(Profile* profile,
        vector<Capability>& requiredCapabilites,
        vector<Capability>& optionalCapabilites, string& matchToken) {
	bool match = true;

	// When can we NOT reuse a specific runtime?
	// Only if fragmentation is set to BUILDTIME and if either a) one supports the capability and
	// the other does not OR b) the capability value differs.
	// So we add strings to create a unique match token for every
	// runtime that need be built
	for (vector<Capability>::iterator capability = requiredCapabilites.begin(); capability
	        != requiredCapabilites.end(); capability++) {
		Capability matchedCapability = profile->getCapability(
		        capability->getName());
		CapabilityState matchedState = matchedCapability.getState();
		// Ok, so we don't support this, bail out!
		if (matchedState == NOT_IMPLEMENTED || matchedState == UNSUPPORTED) {
			match = false;
		}
		Fragmentation fragmentation = matchedCapability.getFragmentation();
		string valueStr =
		        fragmentation == BUILDTIME ? matchedCapability.getValue() : "";
		matchToken.append(valueStr);
		matchToken.append("|");
	}

	// So, the optional capabilities are matched in a different way.
	// We add stuff to the matchTokens string to produce a string that
	// is unique to the optional capabilities being matched.
	for (vector<Capability>::iterator capability = optionalCapabilites.begin(); capability
	        != optionalCapabilites.end(); capability++) {
		Capability matchedCapability = profile->getCapability(
		        capability->getName());
		CapabilityState matchedState = matchedCapability.getState();
		Fragmentation fragmentation = matchedCapability.getFragmentation();
		string valueStr =
		        fragmentation == BUILDTIME ? matchedCapability.getValue() : "";
		bool capSupported = fragmentation == BUILDTIME && (matchedState
		        == NOT_IMPLEMENTED || matchedState == UNSUPPORTED);
		matchToken.append((capSupported ? "+" : "-") + valueStr);
		matchToken.append("|");
	}

	// Finally we add PROPERTIES of the runtime which are buildtime fragmented.
	// For example, different device types or icon sizes should always generate
	// a unique runtime.
	set<string> allCapabilities = profile->getCapabilities();
	for (set<string>::iterator allCapabilitesIt = allCapabilities.begin(); allCapabilitesIt
	        != allCapabilities.end(); allCapabilitesIt++) {
		string capabilityName = *allCapabilitesIt;
		Capability capability = profile->getCapability(capabilityName);
		if (capability.getType() == "property") {
			Fragmentation fragmentation = capability.getFragmentation();
			string valueStr =
			        fragmentation == BUILDTIME ? capability.getValue() : "-";
			matchToken.append(valueStr);
			matchToken.append("|");
		}
	}
	return match;
}