source: project/bloom-filter/tests/bloom-filter-test.scm @ 5443

Last change on this file since 5443 was 5065, checked in by Kon Lovett, 14 years ago

Changed to chicken-setup tests directory structure.

File size: 2.0 KB
Line 
1;;;; bloom-filter-test.scm
2
3(use testbase testbase-output-compact)
4(use bloom-filter)
5
6(define-test bloom-filter-test "Bloom Filter"
7  (initial
8                (define word-list (read-file "bloom-filter-word-list.txt"))
9                (define mds '(sha1 md5 sha512 #;foo #;bar)) )
10
11        (test/case "Words In List, All K" (
12                        [N (length word-list)]
13                        [other-word-list (map string-reverse word-list)]
14                        [MKP #f]
15                        [P 2.47E-05]
16                        [bf #f]
17                        [false-positives '()] )
18
19                (expect-set! MKP (receive (bloom-filter:desired-m P N (bloom-filter:actual-k mds))))
20                (gloss (sprintf "N = ~A, M = ~A, K = ~A, P = ~A" N (car MKP) (cadr MKP) (caddr MKP)))
21
22                (expect-set! bf (make-bloom-filter (car MKP) mds))
23
24                (expect-success "Add Bloom Filter"
25                        (for-each (lambda (str) (bloom-filter-set! bf str)) word-list))
26
27                (expect-true "Exists in Bloom Filter?"
28                        (every (lambda (str) (bloom-filter-exists? bf str)) word-list))
29
30                (expect-set! false-positives
31                        (filter (lambda (str) (bloom-filter-exists? bf str)) other-word-list))
32                (gloss (sprintf "Palindromic words: ~A" false-positives))
33                (expect-eqv 15 (length false-positives))
34        )
35
36        (test/case "Words In List, Optimal K" (
37                        [N (length word-list)]
38                        [other-word-list (map string-reverse word-list)]
39                        [MKP #f]
40                        [P 2.47E-05]
41                        [bf #f]
42                        [false-positives '()] )
43
44                (expect-set! MKP (receive (bloom-filter:desired-m P N)))
45                (gloss (sprintf "N = ~A, M = ~A, K = ~A, P = ~A" N (car MKP) (cadr MKP) (caddr MKP)))
46
47                (expect-set! bf (make-bloom-filter (car MKP) mds (cadr MKP)))
48
49                (expect-success "Add Bloom Filter"
50                        (for-each (lambda (str) (bloom-filter-set! bf str)) word-list))
51
52                (expect-true "Exists in Bloom Filter?"
53                        (every (lambda (str) (bloom-filter-exists? bf str)) word-list))
54
55                (expect-set! false-positives
56                        (filter (lambda (str) (bloom-filter-exists? bf str)) other-word-list))
57                (gloss (sprintf "Palindromic words: ~A" false-positives))
58                (expect-eqv 15 (length false-positives))
59        )
60)
61
62(test::styler-set! bloom-filter-test test::output-style-compact)
63(run-test "Bloom Filter Tests")
Note: See TracBrowser for help on using the repository browser.