From d40647c58a5323890ddb191cf7f945ed771cac02 Mon Sep 17 00:00:00 2001
From: Jakhes <dean.schmitz@schmitzbauer.de>
Date: Wed, 9 Nov 2022 22:48:29 +0100
Subject: [PATCH] Adding linear_regression tests

---
 .../linear_regression_test.pl                 | 299 +++++++++++++++---
 1 file changed, 249 insertions(+), 50 deletions(-)

diff --git a/src/methods/linear_regression/linear_regression_test.pl b/src/methods/linear_regression/linear_regression_test.pl
index 39bafe9..f3b920c 100644
--- a/src/methods/linear_regression/linear_regression_test.pl
+++ b/src/methods/linear_regression/linear_regression_test.pl
@@ -7,82 +7,281 @@
 :- use_module('../../helper_files/helper.pl').
 
 reset_Model :-
-        initModelEmpty(1).
+        linear_regression_initModel([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,1], 0.0, 1).
 
-:- begin_tests(lists).
+reset_Model_WithWeights :-
+        linear_regression_initModelWithWeights([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,1], [0.2,0.1,0.2,0.5], 0.0, 1).
 
 
-%% train tests
-test(correct_train) :-
+
+%%
+%% TESTING predicate linear_regression_initModel/5
+%%
+:- begin_tests(linear_regression_initModel).      
+
+%% Failure Tests
+                                            
+test(linear_regression_InitModel_Too_Few_Labels, [error(_, system_error('Error'))]) :-
+        linear_regression_initModel([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.0, 1).
+
+test(linear_regression_InitModel_Too_Many_Labels, [error(_, system_error('Error'))]) :-
+        linear_regression_initModel([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,1,0,1], 0.0, 1).
+
+test(linear_regression_InitModel_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :-
+        linear_regression_initModel([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,2,3], 0.0, 1).
+
+
+%% Successful Tests
+
+test(linear_regression_InitModel_Normal_Use) :-
+        linear_regression_initModel([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,1], 0.0, 1).
+
+test(linear_regression_InitModel_CSV_Input) :-
+        open('src/data_csv/iris2.csv', read, File),
+        take_csv_row(File, skipFirstRow,10, Data),
+        linear_regression_initModel(Data, 4, [0,1,0,1,1,0,1,1,1,0], 0.5, 0).
+
+:- end_tests(linear_regression_initModel).
+
+
+
+%%
+%% TESTING predicate linear_regression_initModelWithWeights/6
+%%
+:- begin_tests(linear_regression_initModelWithWeights).      
+
+%% Failure Tests
+                                            
+test(linear_regression_InitModelWithWeights_Too_Few_Labels, [error(_, system_error('Error'))]) :-
+        linear_regression_initModelWithWeights([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,0.1,0.2,0.5], 0.0, 1).
+
+test(linear_regression_InitModelWithWeights_Too_Many_Labels, [error(_, system_error('Error'))]) :-
+        linear_regression_initModelWithWeights([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,1,0,1], [0.2,0.1,0.2,0.5], 0.0, 1).
+
+test(linear_regression_InitModelWithWeights_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :-
+        linear_regression_initModelWithWeights([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,2,3], [0.2,0.1,0.2,0.5], 0.0, 1).
+
+
+test(linear_regression_InitModelWithWeights_Too_Few_Weights, [error(_, system_error('Error'))]) :-
+        linear_regression_initModelWithWeights([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,1], [0.2,0.5], 0.0, 1).
+
+test(linear_regression_InitModelWithWeights_Too_Many_Weights, [error(_, system_error('Error'))]) :-
+        linear_regression_initModelWithWeights([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,1], [0.2,0.1,0.2,0.1,0.2,0.5], 0.0, 1).
+
+
+%% Successful Tests
+
+test(linear_regression_InitModelWithWeights_Normal_Use) :-
+        linear_regression_initModelWithWeights([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,1], [0.2,0.1,0.2,0.5], 0.0, 1).
+
+test(linear_regression_InitModelWithWeights_CSV_Input) :-
+        open('src/data_csv/iris2.csv', read, File),
+        take_csv_row(File, skipFirstRow,10, Data),
+        linear_regression_initModelWithWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], [0.2,0.1,0.2,0.5,0.2,0.4,1.2,0.7,2.1,0.1], 0.5, 0).
+
+:- end_tests(linear_regression_initModelWithWeights).
+
+
+
+%%
+%% TESTING predicate linear_regression_computeError/4
+%%
+:- begin_tests(linear_regression_computeError).      
+
+%% Failure Tests
+                                            
+test(linear_regression_ComputeError_Too_Few_Labels, [error(_, system_error('Error'))]) :-
+        reset_Model,
+        linear_regression_computeError([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], _).
+
+test(linear_regression_ComputeError_Too_Many_Labels, [error(_, system_error('Error'))]) :-
+        reset_Model,
+        linear_regression_computeError([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,1,0,1], _).
+
+test(linear_regression_ComputeError_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :-
+        reset_Model,
+        linear_regression_computeError([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,2,3], _).
+
+
+%% Successful Tests
+
+test(linear_regression_ComputeError_Normal_Use) :-
+        reset_Model,
+        linear_regression_computeError([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,1], Error),
+        print('\nError: '),
+        print(Error).
+
+
+:- end_tests(linear_regression_computeError).
+
+
+
+%%
+%% TESTING predicate linear_regression_parameters/1
+%%
+:- begin_tests(linear_regression_parameters).      
+
+%% Failure Tests
+        
+
+%% Successful Tests
+
+test(linear_regression_Parameters_Normal_Use) :-
         reset_Model,
-        convert_list_to_float_array([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, array(Xsize, Xrownum, X)),
-        convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
-        train(X,Xsize, Xrownum,Y, Ysize,1 ,0).
-test(false_train, fail) :-
+        linear_regression_parameters(Parameters),
+        print('\nParameters: '),
+        print(Parameters).
+
+:- end_tests(linear_regression_parameters).
+
+
+
+%%
+%% TESTING predicate linear_regression_modifyParameters/1
+%%
+:- begin_tests(linear_regression_modifyParameters).      
+
+%% Failure Tests
+                                            
+test(linear_regression_ModifyParameters_Too_Few_Parameters, [error(_, system_error('Error'))]) :-
         reset_Model,
-        convert_list_to_float_array([],3, array(Xsize, Xrownum, X)),
-        convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
-        train(X,Xsize, Xrownum,Y, Ysize, 1, 0).
-test(false_train2, fail) :-
+        linear_regression_modifyParameters([3,4]),
+        linear_regression_parameters(Parameters),
+        print('\nParameters: '),
+        print(Parameters).
+
+test(linear_regression_ModifyParameters_Too_Many_Parameters, [error(_, system_error('Error'))]) :-
         reset_Model,
-        convert_list_to_float_array([],0, array(Xsize, Xrownum, X)),
-        convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
-        train(X,Xsize, Xrownum,Y, Ysize, 1, 0).
-test(false_train3, fail) :-
+        linear_regression_modifyParameters([1,2,1,2,3,4]),
+        linear_regression_parameters(Parameters),
+        print('\nParameters: '),
+        print(Parameters).
+
+test(linear_regression_ModifyParameters_Bad_Parameter_Value, [error(_, system_error('Error'))]) :-
         reset_Model,
-        convert_list_to_float_array([1,2],0, array(Xsize, Xrownum, X)),
-        convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
-        train(X,Xsize, Xrownum,Y, Ysize, 1, 0).
-test(false_train3, fail) :-
+        linear_regression_modifyParameters([1,2,-3,4]),
+        linear_regression_parameters(Parameters),
+        print('\nParameters: '),
+        print(Parameters).
+        
+
+%% Successful Tests
+
+test(linear_regression_ModifyParameters_Normal_Use) :-
         reset_Model,
-        convert_list_to_float_array([1,2,44,3],3, array(Xsize, Xrownum, X)),
-        convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
-        train(X,Xsize, Xrownum,Y, Ysize, 1, 0).
-test(false_train4) :-
+        linear_regression_modifyParameters([1,2,3,4]),
+        linear_regression_parameters(Parameters),
+        print('\nParameters: '),
+        print(Parameters).
+
+:- end_tests(linear_regression_modifyParameters).
+
+
+
+%%
+%% TESTING predicate linear_regression_predict/10
+%%
+:- begin_tests(linear_regression_predict).      
+
+%% Failure Tests
+                                            
+test(linear_regression_Predict_Diffrent_Dims_Than_Trained) :-
         reset_Model,
-        convert_list_to_float_array([1,2,44,3],2, array(Xsize, Xrownum, X)),
-        convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
-        train(X,Xsize, Xrownum,Y, Ysize, 1, 0).
+        linear_regression_predict([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, _).
+        
+
+%% Successful Tests
 
-test(train) :-
+test(linear_regression_Predict_Normal_Use) :-
         reset_Model,
-        convert_list_to_float_array([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, array(Xsize, Xrownum, X)),
-        convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
-        train(X,Xsize, Xrownum,Y, Ysize, 1, 0),
-        predict(X, Xsize,Xrownum, Predic, PredicSize),
-        convert_float_array_to_list(Predic, PredicSize, [0.20000000298023224,0.20000000298023224,0.20000000298023224,0.20000000298023224]).
+        linear_regression_predict([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, Responses),
+        print('\nResponses: '),
+        print(Responses).
+
+test(linear_regression_Predict_Normal_Use) :-
+        reset_Model_WithWeights,
+        linear_regression_predict([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, Responses),
+        print('\nResponses: '),
+        print(Responses).
+
+:- end_tests(linear_regression_predict).
+
 
-:- end_tests(lists).
 
 %%
-%% TESTING predicate predicate/10
+%% TESTING predicate linear_regression_train/5
 %%
-:- begin_tests(predicate).      
+:- begin_tests(linear_regression_train).      
 
 %% 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(linear_regression_Train_Too_Few_Labels, [error(_, system_error('Error'))]) :-
+        linear_regression_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], 1, _).
+
+test(linear_regression_Train_Too_Many_Labels, [error(_, system_error('Error'))]) :-
+        linear_regression_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,1,0,1], 1, _).
+
+test(linear_regression_Train_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :-
+        linear_regression_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,2,3], 1, _).
+
+
+%% Successful Tests
+
+test(linear_regression_Train_Normal_Use) :-
+        linear_regression_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,1], 1, Error),
+        print('\nError: '),
+        print(Error).
+
+test(linear_regression_Train_CSV_Input) :-
+        open('src/data_csv/iris2.csv', read, File),
+        take_csv_row(File, skipFirstRow,10, Data),
+        linear_regression_train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 0, Error),
+        print('\nError: '),
+        print(Error).
+
+:- end_tests(linear_regression_train).
+
+
+
+%%
+%% TESTING predicate linear_regression_trainWithWeights/6
+%%
+:- begin_tests(linear_regression_trainWithWeights).      
+
+%% Failure Tests
+                                            
+test(linear_regression_TrainWithWeights_Too_Few_Labels, [error(_, system_error('Error'))]) :-
+        linear_regression_trainWithWeights([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,0.1,0.2,0.5], 1 ,_).
+
+test(linear_regression_TrainWithWeights_Too_Many_Labels, [error(_, system_error('Error'))]) :-
+        linear_regression_trainWithWeights([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,1,0,1], [0.2,0.1,0.2,0.5], 1 ,_).
+
+test(linear_regression_TrainWithWeights_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :-
+        linear_regression_trainWithWeights([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,2,3], [0.2,0.1,0.2,0.5], 1 ,_).
+
+
+test(linear_regression_TrainWithWeights_Too_Few_Weights, [error(_, system_error('Error'))]) :-
+        linear_regression_trainWithWeights([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,1], [0.2,0.5], 1 ,_).
+
+test(linear_regression_TrainWithWeights_Too_Many_Weights, [error(_, system_error('Error'))]) :-
+        linear_regression_trainWithWeights([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,1], [0.2,0.1,0.2,0.1,0.2,0.5], 1 ,_).
 
-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, _).
-        
 
 %% 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(linear_regression_TrainWithWeights_Normal_Use) :-
+        linear_regression_trainWithWeights([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,1], [0.2,0.1,0.2,0.5], 1 ,Error),
+        print('\nError: '),
+        print(Error).
 
-test(testDescription4, [true(Error =:= 0.9797958971132711)]) :-
-        reset_Model_No_Train(perceptron),
+test(linear_regression_TrainWithWeights_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).
+        linear_regression_trainWithWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], [0.2,0.1,0.2,0.5,0.2,0.4,1.2,0.7,2.1,0.1], 0, Error),
+        print('\nError: '),
+        print(Error).
 
-:- end_tests(predicate).
+:- end_tests(linear_regression_trainWithWeights).
 
 run_linear_regression_tests :-
         run_tests.
-- 
GitLab