public Test_OneConfig(List<Case> trainingData,List<Case> testingData, ArrayList<String> config, int testNum){
		
		this.config=config;
		this.testNum = String.valueOf(testNum);
		
		double []Attributesweights;
		
		// Set the retrieval k
		int k = Integer.valueOf(this.config.get(0));
		// Set the retrieval distances
		String DistanceMeasure = this.config.get(1);
		// Set the reain policy
		String policy = this.config.get(2);
		
		//Data treatment ##################
	    CBR_Library library = new CBR_Library(trainingData);
	    int TestDataSize = testingData.size();
	    //System.out.println(TestDataSize + " cases were read");
		Attributesweights = library.getAttributesWeights();
	    
		// Init Retrieve, Reuse, Evaluation and Retain ###################
	    CBR_Retrieve retrieval = new CBR_Retrieve(k,DistanceMeasure,Attributesweights);
		CBR_Reuse reuse = new CBR_Reuse();
		this.evRet = new CBR_EvaluateRetain(policy,library,Attributesweights);
		
		// Set the variable Retain policy parameters
		int kSimilar=0;
		double simThreshold=0;
		double simRemoveThres=0;

		if (!(policy=="FullRetain")) {
			if (policy=="Similarity"){
				kSimilar = Integer.valueOf(this.config.get(3));
				simThreshold = Double.valueOf(this.config.get(4));
				this.evRet.setKSimilar(kSimilar);
				this.evRet.setSimThreshold(simThreshold);
			}
			else if (policy=="NegativeCases"){
				kSimilar = Integer.valueOf(this.config.get(3));
				simThreshold = Double.valueOf(this.config.get(4));
				simRemoveThres = Double.valueOf(this.config.get(5));
				this.evRet.setKSimilar(kSimilar);
				this.evRet.setSimThreshold(simThreshold);
				this.evRet.setSimDelThrs(simRemoveThres);
			}	
		}
	
		for (int i=0; i<TestDataSize; i++)
		{
		
			Case NewCase = testingData.get(i);
			List<Case> PastCases;
			List<Case> NearestNeighbors;
		
			int classPredicted;
		
		      	
			//Retrieve Phase      	      	
			PastCases = library.getWholeList();
		
		        	
			NearestNeighbors = retrieval.getkNN(PastCases, NewCase, k);
		
			//Reuse Phase
			classPredicted = reuse.getNewCaseClassLabel(NearestNeighbors, NewCase);
		
			NewCase.setPredictedClassLabel(classPredicted);
	
			//Evaluate-Retain
			
			this.evRet.doYourjob(NewCase);
		
		
		}
	
		
		//ArrayList<Double> accuracies = this.evRet.getAccuracies();
		//ArrayList<ArrayList<Integer>> labelPairs = this.evRet.getLabelPairs();
	
		//System.out.println("Accuracies = "+accuracies);
		//System.out.println("Final accuracy = "+this.evRet.getAccuracy());
		//System.out.println("Storing...");
		try {
			this.storeResults();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//System.out.println("Finished!!!!");
	}