Example #1
0
void decifrar(char * mensagem, char * resultado) {
	int i, minDev, minI, dev;
	char order[26]; //vetor para a sequencia de frequencia
	int freq[26]; //vetor para a quantidade de cada letra

	char *temp = malloc((strlen(mensagem) + 1) * sizeof(char));

	//testar todas as possibilidades
	for (i = 0; i < 26; i++) {
		//decifrar usando a chave atual
		transform(mensagem, temp, i);
		//calcular a frequencia de letras
		calculateFrequency(temp, order, freq);
		//calcular o desvio com relação à distribuição esperada
		dev = abs(getDeviation(order, freq));
		if (!i || (dev < minDev && isValid(temp))) {
			//armazenar o menor desvio
			minDev = dev;
			minI = i;
		}
		if (!minDev) {
			//se a distancia for zero não é necessário
			//continuar a verificação
			break;
		}
	}

	free(temp);

	//usando o menor desvio, traduza a mensagem
	transform(mensagem, resultado, minI);
}
void IntegrationTest::checkWithSpikes(const char* keyword){
    int errorOccurrences = 0;
    size_t jvar = 0 ;
    bool spikePrev = false;
    bool spikeCurrent = false;
    Deviation deviation;

    for (size_t ivar = 0; ivar < referenceVec->size(); ivar++){
        int errorOccurrencesPrev = errorOccurrences;
        spikePrev = spikeCurrent;
        getDeviation(ivar,jvar, deviation);
        errorOccurrences += checkDeviation(deviation);
        if (errorOccurrences != errorOccurrencesPrev){
            spikeCurrent = true;
        } else{
            spikeCurrent = false;
        }
        if(spikePrev&&spikeCurrent){
            std::cout << "For keyword " << keyword << " at time step " << (*referenceVec)[ivar] <<std::endl;
            OPM_THROW(std::invalid_argument, "For keyword " << keyword << " at time step " << (*referenceVec)[ivar] << ", wwo deviations in a row exceed the limit. Not a spike value. Integration test fails." );
        }
        if(errorOccurrences > this->spikeLimit){
            std::cout << "For keyword " << keyword << std::endl;
            OPM_THROW(std::invalid_argument, "For keyword " << keyword << " too many spikes in the vector. Integration test fails.");
        }
    }
}
Example #3
0
void SummaryComparator::getDeviation(size_t refIndex, size_t &checkIndex, Deviation &dev){
    if((*referenceVec)[refIndex] == (*checkVec)[checkIndex]){
        dev = SummaryComparator::calculateDeviations((*referenceDataVec)[refIndex], (*checkDataVec)[checkIndex]);
        checkIndex++;
        return;
    }
    else if((*referenceVec)[refIndex]<(*checkVec)[checkIndex]){
        double value = SummaryComparator::unitStep((*checkDataVec)[checkIndex]);
        /*Must be a little careful here. Flow writes out old value first,
          than changes value. Say there should be a change in production rate from A to B at timestep 300.
          Then the data of time step 300 is A and the next timestep will have value B. Must use the upper limit. */
        dev = SummaryComparator::calculateDeviations((*referenceDataVec)[refIndex], value);
        checkIndex++;
        return;
    }
    else{
        checkIndex++;
        getDeviation(refIndex, checkIndex , dev);
    }
    if(checkIndex == checkVec->size() -1 ){
        return;
    }
}