source: project/release/4/bloom-filter/tags/1.1.0/tests/run.scm @ 20398

Last change on this file since 20398 was 20398, checked in by Kon Lovett, 10 years ago

Rel 1.1 (a little faster)

File size: 2.5 KB
Line 
1(use bloom-filter)
2(use sha1 md5 sha2)
3(use extras srfi-1)
4(use test)
5
6(test-group "Bloom Filter"
7
8  (define +gloss+ '())
9  (define (gloss str) (set! +gloss+ (cons str +gloss+)))
10
11  (define word-list (read-file "bloom-filter-word-list.txt"))
12  (define mdps (list (sha1-primitive) (md5-primitive) (sha512-primitive)))
13
14        (test-group "Words In List, All K"
15          (let ((N (length word-list))
16          (other-word-list (map string-reverse word-list))
17          (MKP #f)
18          (P 2.47E-05)
19          (bf #f)
20          (false-positives '()) )
21
22      (test-assert (receive (desired-m P N (actual-k mdps))))
23      (set! MKP (receive (desired-m P N (actual-k mdps))))
24      (gloss (sprintf "N = ~A, M = ~A, K = ~A, P = ~A" N (car MKP) (cadr MKP) (caddr MKP)))
25
26      (test-assert (make-bloom-filter (car MKP) mdps))
27      (set! bf (make-bloom-filter (car MKP) mdps))
28
29      (test-assert "Add Bloom Filter"
30        (begin (for-each (lambda (str) (bloom-filter-set! bf str)) word-list) #t))
31
32      (test-assert "Exists in Bloom Filter?"
33        (every (lambda (str) (bloom-filter-exists? bf str)) word-list))
34
35      (test-assert "False positives"
36        (filter (lambda (str) (bloom-filter-exists? bf str)) other-word-list))
37      (set! false-positives
38        (filter (lambda (str) (bloom-filter-exists? bf str)) other-word-list))
39      (gloss (sprintf "Palindromic words: ~A" false-positives))
40      (test 15 (length false-positives)) )
41        )
42
43        (test-group "Words In List, Optimal K"
44          (let ((N (length word-list))
45          (other-word-list (map string-reverse word-list))
46          (MKP #f)
47          (P 2.47E-05)
48          (bf #f)
49          (false-positives '()) )
50
51      (test-assert (receive (desired-m P N)))
52      (set! MKP (receive (desired-m P N)))
53      (gloss (sprintf "N = ~A, M = ~A, K = ~A, P = ~A" N (car MKP) (cadr MKP) (caddr MKP)))
54
55      (test-assert (make-bloom-filter (car MKP) mdps (cadr MKP)))
56      (set! bf (make-bloom-filter (car MKP) mdps (cadr MKP)))
57
58      (test-assert "Add Bloom Filter"
59        (begin (for-each (lambda (str) (bloom-filter-set! bf str)) word-list) #t))
60
61      (test-assert "Exists in Bloom Filter?"
62        (every (lambda (str) (bloom-filter-exists? bf str)) word-list))
63
64      (test-assert "False positives"
65        (filter (lambda (str) (bloom-filter-exists? bf str)) other-word-list))
66      (set! false-positives
67        (filter (lambda (str) (bloom-filter-exists? bf str)) other-word-list))
68      (gloss (sprintf "Palindromic words: ~A" false-positives))
69      (test 15 (length false-positives)) )
70        )
71
72  (pp +gloss+)
73)
Note: See TracBrowser for help on using the repository browser.