-
Notifications
You must be signed in to change notification settings - Fork 28
/
regommend_test.go
101 lines (84 loc) · 2.61 KB
/
regommend_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
* Simple recommendation engine
* Copyright (c) 2014, Christian Muehlhaeuser <muesli@gmail.com>
*
* For license see LICENSE.txt
*/
package regommend
import (
"testing"
)
var (
)
func TestEngine(t *testing.T) {
books := Table("books")
booksChrisRead := make(map[interface{}]float64)
booksChrisRead["1984"] = 5.0
booksChrisRead["Robinson Crusoe"] = 4.0
booksChrisRead["Moby-Dick"] = 3.0
books.Add("Chris", booksChrisRead)
booksJayRead := make(map[interface{}]float64)
booksJayRead["1984"] = 5.0
booksJayRead["Robinson Crusoe"] = 4.0
booksJayRead["Gulliver's Travels"] = 4.5
books.Add("Jay", booksJayRead)
// check if both items are still there
p, err := books.Value("Chris")
if err != nil || p == nil {
t.Error("Error retrieving item from engine", err)
}
p, err = books.Value("Jay")
if err != nil || p == nil {
t.Error("Error retrieving item from engine", err)
}
}
func TestNeighbors(t *testing.T) {
books := Table("books")
booksChrisRead := make(map[interface{}]float64)
booksChrisRead["1984"] = 5.0
booksChrisRead["Robinson Crusoe"] = 4.0
booksChrisRead["Moby-Dick"] = 3.0
books.Add("Chris", booksChrisRead)
booksJayRead := make(map[interface{}]float64)
booksJayRead["1984"] = 5.0
booksJayRead["Robinson Crusoe"] = 4.0
booksJayRead["Gulliver's Travels"] = 4.5
books.Add("Jay", booksJayRead)
booksMaryRead := make(map[interface{}]float64)
booksMaryRead["1984"] = 4.0
booksMaryRead["Robinson Crusoe"] = 3.0
booksMaryRead["Gulliver's Travels"] = 4.5
books.Add("Mary", booksMaryRead)
booksJackRead := make(map[interface{}]float64)
booksJackRead["1984"] = 3.0
booksJackRead["Robinson Crusoe"] = 1.0
books.Add("Jack", booksJackRead)
nbs, _ := books.Neighbors("Chris")
if len(nbs) != 3 {
t.Error("Expected 3 neighbours, got", len(nbs))
}
if nbs[0].Key != "Jay" || nbs[1].Key != "Mary" || nbs[2].Key != "Jack" {
t.Error("Unexpected similarity order")
}
}
func TestRecommendations(t *testing.T) {
books := Table("books")
booksChrisRead := make(map[interface{}]float64)
booksChrisRead["1984"] = 5.0
booksChrisRead["Robinson Crusoe"] = 4.0
booksChrisRead["Moby-Dick"] = 3.0
books.Add("Chris", booksChrisRead)
booksJayRead := make(map[interface{}]float64)
booksJayRead["1984"] = 4.0
booksJayRead["Robinson Crusoe"] = 3.0
booksJayRead["Gulliver's Travels"] = 4.5
booksJayRead["A Tale of Two Cities"] = 3.5
books.Add("Jay", booksJayRead)
recs, _ := books.Recommend("Chris")
if len(recs) != 2 {
t.Error("Expected 2 recommendations, got", len(recs))
}
if recs[0].Key != "Gulliver's Travels" || recs[1].Key != "A Tale of Two Cities" {
t.Error("Unexpected recommendation order")
}
}