@@ -3,31 +3,65 @@ defmodule LearnKit.KnnTest do
33
44 alias LearnKit.Knn
55
6- test "create new knn classificator with empty data set" do
7- assert % Knn { data_set: data_set } = Knn . new
8-
9- assert data_set == [ ]
6+ setup_all do
7+ { :ok , classifier: Knn . new ( [ { :a1 , [ [ - 1 , - 1 ] , [ - 2 , - 1 ] , [ - 3 , - 2 ] ] } , { :b1 , [ [ 1 , 1 ] , [ 2 , 1 ] , [ 3 , 2 ] , [ - 2 , - 2 ] ] } ] ) }
108 end
119
12- test "add train data to classificator" do
13- % Knn { data_set: data_set } = Knn . new
14- |> Knn . add_train_data ( { :a1 , [ 1 , 2 ] } )
15- |> Knn . add_train_data ( { :a1 , [ 1 , 3 ] } )
16- |> Knn . add_train_data ( { :b1 , [ 2 , 3 ] } )
10+ describe "for invalid data" do
11+ test "create new classifier with invalid data" do
12+ assert_raise FunctionClauseError , fn ->
13+ Knn . new ( "" )
14+ end
15+ end
16+
17+ test "add train data in invalid format" , state do
18+ assert_raise FunctionClauseError , fn ->
19+ Knn . add_train_data ( state [ :classifier ] , { :something_valid , "invalid" } )
20+ end
21+ end
22+
23+ test "classify without options" , state do
24+ assert_raise FunctionClauseError , fn ->
25+ Knn . classify ( state [ :classifier ] , "" )
26+ end
27+ end
28+
29+ test "classify with empty options" , state do
30+ assert { :error , "Feature option is required" } = Knn . classify ( state [ :classifier ] , [ ] )
31+ end
32+
33+ test "classify with invalid feature" , state do
34+ assert { :error , "Feature option must be presented as array" } = Knn . classify ( state [ :classifier ] , [ feature: "1" ] )
35+ end
1736
18- assert data_set == [ b1: [ [ 2 , 3 ] ] , a1: [ [ 1 , 3 ] , [ 1 , 2 ] ] ]
37+ test "classify with invalid k" , state do
38+ assert { :error , "K option must be positive integer" } = Knn . classify ( state [ :classifier ] , [ feature: [ - 1 , - 2 ] , k: - 2 ] )
39+ end
1940 end
2041
21- test "classify new feature" do
22- classificator = Knn . new
23- |> Knn . add_train_data ( { :a1 , [ - 1 , - 1 ] } )
24- |> Knn . add_train_data ( { :a1 , [ - 2 , - 1 ] } )
25- |> Knn . add_train_data ( { :a1 , [ - 3 , - 2 ] } )
26- |> Knn . add_train_data ( { :a2 , [ 1 , 1 ] } )
27- |> Knn . add_train_data ( { :a2 , [ 2 , 1 ] } )
28- |> Knn . add_train_data ( { :a2 , [ 3 , 2 ] } )
29- |> Knn . add_train_data ( { :a2 , [ - 2 , - 2 ] } )
30-
31- assert { :ok , :a1 } = Knn . classify ( classificator , [ feature: [ - 1 , - 2 ] , k: 3 , weight: "distance" ] )
42+ describe "for valid data" do
43+ test "create new knn classifier with empty data set" do
44+ assert % Knn { data_set: data_set } = Knn . new
45+
46+ assert data_set == [ ]
47+ end
48+
49+ test "add train data to classifier" do
50+ % Knn { data_set: data_set } =
51+ Knn . new
52+ |> Knn . add_train_data ( { :a1 , [ 1 , 2 ] } )
53+ |> Knn . add_train_data ( { :a1 , [ 1 , 3 ] } )
54+ |> Knn . add_train_data ( { :b1 , [ 2 , 3 ] } )
55+
56+ assert data_set == [ b1: [ [ 2 , 3 ] ] , a1: [ [ 1 , 3 ] , [ 1 , 2 ] ] ]
57+ end
58+
59+ test "classify new feature" , state do
60+ assert { :ok , :a1 } = Knn . classify ( state [ :classifier ] , [ feature: [ - 1 , - 2 ] , k: 3 , weight: "distance" ] )
61+ end
62+
63+ test "classify new feature, for existed point" , state do
64+ assert { :ok , :b1 } = Knn . classify ( state [ :classifier ] , [ feature: [ - 2 , - 2 ] , k: 3 , weight: "uniform" ] )
65+ end
3266 end
3367end
0 commit comments