diff --git a/src/methods/pca/pca.cpp b/src/methods/pca/pca.cpp
index cc7068d9785ba0003315e20d4e1d197c923e0780..57d66dd60b3f2e3bb04a4effdb9007e196dde1aa 100644
--- a/src/methods/pca/pca.cpp
+++ b/src/methods/pca/pca.cpp
@@ -58,7 +58,7 @@ void pca(SP_integer scaleData, char const *decompositionPolicy,
         {
             PCA<RandomizedSVDPolicy>((scaleData == 1)).Apply(data, transformedReturnMat, eigValReturnVector, eigVecReturnMat);
         }
-        else if (strcmp(decompositionPolicy, "randomized-block-krylov") == 0)
+        else if (strcmp(decompositionPolicy, "randomized_block_krylov") == 0)
         {
             PCA<RandomizedBlockKrylovSVDPolicy>((scaleData == 1)).Apply(data, transformedReturnMat, eigValReturnVector, eigVecReturnMat);
         }
@@ -203,4 +203,4 @@ double pcaVarianceDimReduction(SP_integer scaleData, char const *decompositionPo
     returnMatrixInformation(data, transformedMatArr, transformedMatColNum, transformedMatRowNum);
 
     return returnValue;
-}
\ No newline at end of file
+}
diff --git a/src/methods/pca/pca.pl b/src/methods/pca/pca.pl
index 05ec3dfdd1c8b1f235e4ea72dd2ea9e592d6cd07..7d15876c4ffc0254666e9f714099cf3213d33fa8 100644
--- a/src/methods/pca/pca.pl
+++ b/src/methods/pca/pca.pl
@@ -39,7 +39,8 @@ pca(ScaleData, DecompositionPolicy, DataList, DataRows, TransformedList, TDataCo
         convert_float_array_to_list(Y, Ysize, EigValList),
         convert_float_array_to_2d_list(Z, ZCols, ZRows, EigVecList).
 
-foreign(pca, c, pcaI(    +integer, +string,
+foreign(pca, c, pcaI(   +integer, 
+                        +string,
                         +pointer(float_array), +integer, +integer,
                         -pointer(float_array), -integer, -integer,
                         -pointer(float_array), -integer,
@@ -61,11 +62,13 @@ foreign(pca, c, pcaI(    +integer, +string,
 %%              Define the new dimensionality of the data with newDimension.
 %%
 pcaDimReduction(ScaleData, DecompositionPolicy, DataList, DataRows, NewDim, TransformedList, TDataCols, Variance) :-
+        NewDim > 0,
         convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)),
         pcaDimReductionI(ScaleData, DecompositionPolicy, X, Xsize, Xrows, NewDim, TData, TDataCols, TDataRows, Variance),
         convert_float_array_to_2d_list(TData, TDataCols, TDataRows, TransformedList).
 
-foreign(pcaDimReduction, c, pcaDimReductionI(    +integer, +string,
+foreign(pcaDimReduction, c, pcaDimReductionI(   +integer, 
+                                                +string,
                                                 +pointer(float_array), +integer, +integer,
                                                 +integer,
                                                 -pointer(float_array), -integer, -integer,
@@ -87,11 +90,14 @@ foreign(pcaDimReduction, c, pcaDimReductionI(    +integer, +string,
 %%              Define to which variance the data should be reduced to.
 %%
 pcaVarianceDimReduction(ScaleData, DecompositionPolicy, DataList, DataRows, VarRetained, TransformedList, TDataCols, Variance) :-
+        VarRetained >= 0.0,
+        VarRetained =< 1.0,
         convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)),
         pcaVarianceDimReductionI(ScaleData, DecompositionPolicy, X, Xsize, Xrows, VarRetained, TData, TDataCols, TDataRows, Variance),
         convert_float_array_to_2d_list(TData, TDataCols, TDataRows, TransformedList).
 
-foreign(pcaVarianceDimReduction, c, pcaVarianceDimReductionI(    +integer, +string,
+foreign(pcaVarianceDimReduction, c, pcaVarianceDimReductionI(   +integer, 
+                                                                +string,
                                                                 +pointer(float_array), +integer, +integer,
                                                                 +float32,
                                                                 -pointer(float_array), -integer, -integer,
diff --git a/src/methods/pca/pca_test.pl b/src/methods/pca/pca_test.pl
index c9ec81f80f63c065f08e3099950964c54e3bff52..045b4b9d46a2329b10a0389191897b603964ee28 100644
--- a/src/methods/pca/pca_test.pl
+++ b/src/methods/pca/pca_test.pl
@@ -7,49 +7,184 @@
 :- use_module('../../helper_files/helper.pl').
 
 
-:- begin_tests(lists).
 
-test(alpha_after_train) :-
-        open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris.csv', read, A),
-        take_csv_row(A, 10, B),
-        convert_list_to_float_array(B , 10, array(Xsize, Xrownum, X)),
-        pca(0, randomized, X, Xsize, Xrownum, Tansfomed, TCols, TRows, EigVal, EigValSize, EigVec, EigVecCols, EigVecRows),
-        convert_float_array_to_2d_list(Tansfomed, TCols, TRows, TOut),
-        convert_float_array_to_list(EigVal, EigValSize, EigValOut),
-        convert_float_array_to_2d_list(EigVec, EigVecCols, EigVecRows, EigVecOut),
-        print(TOut).
+%%
+%% TESTING predicate pca/9
+%%
+:- begin_tests(pca).      
+
+%% Failure Tests
+                                            
+test(pca_Wrong_DecompositionPolicy_Input, [error(domain_error('The given DecompositionPolicy is unkown!' , wrongInput), _)]) :-
+        pca(0, wrongInput, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _).
+        
+
+%% Successful Tests
+
+test(pca_Normal_Use_Exact) :-
+        pca(0, exact, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TDataList, _, EigValList, EigVecList, _),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nEigenValues: '),
+        print(EigValList),
+        print('\nEigenVectors: '),
+        print(EigVecList).
+
+test(pca_Normal_Use_Randomized) :-
+        pca(0, randomized, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TDataList, _, EigValList, EigVecList, _),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nEigenValues: '),
+        print(EigValList),
+        print('\nEigenVectors: '),
+        print(EigVecList).
+
+test(pca_Normal_Use_Randomized_Block_Krylov) :-
+        pca(0, randomized_block_krylov, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TDataList, _, EigValList, EigVecList, _),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nEigenValues: '),
+        print(EigValList),
+        print('\nEigenVectors: '),
+        print(EigVecList).
+
+test(pca_Normal_Use_Quic) :-
+        pca(0, quic, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TDataList, _, EigValList, EigVecList, _),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nEigenValues: '),
+        print(EigValList),
+        print('\nEigenVectors: '),
+        print(EigVecList).
+
+test(pca_CSV_Input) :-
+        open('src/data_csv/iris2.csv', read, File),
+        take_csv_row(File, skipFirstRow,10, Data),
+        pca(1, exact, Data, 4, TDataList, _, EigValList, EigVecList, _),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nEigenValues: '),
+        print(EigValList),
+        print('\nEigenVectors: '),
+        print(EigVecList).
+
+:- end_tests(pca).
+
 
-:- end_tests(lists).
 
 %%
-%% TESTING predicate predicate/10
+%% TESTING predicate pcaDimReduction/8
 %%
-:- begin_tests(predicate).      
+:- begin_tests(pcaDimReduction).      
 
 %% Failure Tests
                                             
-test(testDescription, [error(domain_error('expectation' , culprit), _)]) :-
-        reset_Model_No_Train(perceptron),
-        train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _).
+test(pcaDimReduction_Wrong_DecompositionPolicy_Input, [error(domain_error('The given DecompositionPolicy is unkown!' , wrongInput), _)]) :-
+        pcaDimReduction(0, wrongInput, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 2, _, _, _).
 
-test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :-
-        reset_Model_No_Train(perceptron),
-        train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _).
-        
+test(pcaDimReduction_Negative_NewDimension, fail) :-
+        pcaDimReduction(0, randomized, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, -2, _, _, _).
+
+test(pcaDimReduction_Too_Big_NewDimension, fail) :-
+        pcaDimReduction(0, randomized, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 5, _, _, _).
 
 %% Successful Tests
 
-test(testDescription3, [true(Error =:= 1)]) :-
-        reset_Model_No_Train(perceptron),
-        train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error).
+test(pcaDimReduction_Normal_Use_Exact) :-
+        pcaDimReduction(0, exact, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 2, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
+
+test(pcaDimReduction_Normal_Use_Randomized) :-
+        pcaDimReduction(0, randomized, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 2, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
+
+test(pcaDimReduction_Normal_Use_Randomized_Block_Krylov) :-
+        pcaDimReduction(0, randomized_block_krylov, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 2, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
+
+test(pcaDimReduction_Normal_Use_Quic) :-
+        pcaDimReduction(0, quic, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 2, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
+
+test(pcaDimReduction_CSV_Input) :-
+        open('src/data_csv/iris2.csv', read, File),
+        take_csv_row(File, skipFirstRow,10, Data),
+        pcaDimReduction(1, exact, Data, 4, 2, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
+
+:- end_tests(pcaDimReduction).
+
+
+
+%%
+%% TESTING predicate pcaVarianceDimReduction/8
+%%
+:- begin_tests(pcaVarianceDimReduction).      
+
+%% Failure Tests
+
+test(pcaVarianceDimReduction_Wrong_DecompositionPolicy_Input, [error(domain_error('The given DecompositionPolicy is unkown!' , wrongInput), _)]) :-
+        pcaVarianceDimReduction(0, wrongInput, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 0.5, _, _, _).
+
+test(pcaVarianceDimReduction_Bad_ToRetainVar_Input, fail) :-
+        pcaVarianceDimReduction(0, randomized, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, -1.0, _, _, _),
+        pcaVarianceDimReduction(0, randomized, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 1.1, _, _, _).
+
+%% Successful Tests
+
+test(pcaVarianceDimReduction_Normal_Use_Exact) :-
+        pcaVarianceDimReduction(0, exact, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 0.5, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
+
+test(pcaVarianceDimReduction_Normal_Use_Randomized) :-
+        pcaVarianceDimReduction(0, randomized, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 0.5, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
+
+test(pcaVarianceDimReduction_Normal_Use_Randomized_Block_Krylov) :-
+        pcaVarianceDimReduction(0, randomized_block_krylov, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 0.5, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
+
+test(pcaVarianceDimReduction_Normal_Use_Quic) :-
+        pcaVarianceDimReduction(0, quic, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 0.5, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
 
-test(testDescription4, [true(Error =:= 0.9797958971132711)]) :-
-        reset_Model_No_Train(perceptron),
+test(pcaVarianceDimReduction_CSV_Input) :-
         open('src/data_csv/iris2.csv', read, File),
         take_csv_row(File, skipFirstRow,10, Data),
-        train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error).
+        pcaVarianceDimReduction(1, exact, Data, 4, 0.2, TDataList, _, RetainedVar),
+        print('\nTransformed Data: '),
+        print(TDataList),
+        print('\nRetained Variance: '),
+        print(RetainedVar).
 
-:- end_tests(predicate).
+:- end_tests(pcaVarianceDimReduction).
 
 run_pca_tests :-
         run_tests.