IDs stats.
This commit is contained in:
parent
a21de657d0
commit
c94d8f4184
5 changed files with 44 additions and 4 deletions
2
Makefile
2
Makefile
|
@ -143,7 +143,7 @@ utils.so: utils.o
|
||||||
utils.o: utils.import.scm
|
utils.o: utils.import.scm
|
||||||
utils.import.scm: $(UTILS-SOURCES)
|
utils.import.scm: $(UTILS-SOURCES)
|
||||||
|
|
||||||
PRIMES-SOURCES=primes.scm testing.import.scm
|
PRIMES-SOURCES=primes.scm testing.import.scm utils.import.scm
|
||||||
|
|
||||||
primes.so: primes.o
|
primes.so: primes.o
|
||||||
primes.o: primes.import.scm
|
primes.o: primes.import.scm
|
||||||
|
|
|
@ -78,6 +78,7 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
(-print () "Print given member file"
|
(-print () "Print given member file"
|
||||||
(-action- 'print-member-file))
|
(-action- 'print-member-file))
|
||||||
(-tests () "Run self-tests upon startup" (-run-tests?- #t))
|
(-tests () "Run self-tests upon startup" (-run-tests?- #t))
|
||||||
|
(-idstats () "Returns information about available member ids" (-action- 'print-idstats))
|
||||||
)
|
)
|
||||||
|
|
||||||
;; Run tests
|
;; Run tests
|
||||||
|
@ -127,4 +128,8 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
(print-member-source mr))
|
(print-member-source mr))
|
||||||
(else
|
(else
|
||||||
(print "No member specified!"))))
|
(print "No member specified!"))))
|
||||||
|
((print-idstats)
|
||||||
|
(newline)
|
||||||
|
(print-members-ids-stats MB)
|
||||||
|
(newline))
|
||||||
)
|
)
|
||||||
|
|
|
@ -99,7 +99,8 @@
|
||||||
(print-source-listing lines (list highlight)
|
(print-source-listing lines (list highlight)
|
||||||
(*member-file-context*)
|
(*member-file-context*)
|
||||||
a:error a:default
|
a:error a:default
|
||||||
"" "" "...")))
|
"" "" "...")
|
||||||
|
(newline)))
|
||||||
(if (eq? (*member-file-check-syntax*) 'error)
|
(if (eq? (*member-file-check-syntax*) 'error)
|
||||||
(exit 1)
|
(exit 1)
|
||||||
(list member-file-error-symbol
|
(list member-file-error-symbol
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
members-base-stats
|
members-base-stats
|
||||||
print-members-base-info
|
print-members-base-info
|
||||||
print-members-base-stats
|
print-members-base-stats
|
||||||
|
get-free-members-ids
|
||||||
|
print-members-ids-stats
|
||||||
members-base-tests!
|
members-base-tests!
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -340,6 +342,31 @@
|
||||||
(print month " " (string-intersperse (map number->string vals) " "))
|
(print month " " (string-intersperse (map number->string vals) " "))
|
||||||
(loop (cdr rows)))))))
|
(loop (cdr rows)))))))
|
||||||
|
|
||||||
|
;; Returns all free ids
|
||||||
|
(define (get-free-members-ids mb)
|
||||||
|
(let ((ids (list-members-ids mb)))
|
||||||
|
(filter
|
||||||
|
(lambda (id)
|
||||||
|
(not (member id ids)))
|
||||||
|
(gen-all-4digit-primes))))
|
||||||
|
|
||||||
|
;; Prints statistics about allocated and unused valid/invalid IDs.
|
||||||
|
(define (print-members-ids-stats MB)
|
||||||
|
(print "Allocated IDs: "
|
||||||
|
(length (list-members-ids MB))
|
||||||
|
"/"
|
||||||
|
(length (gen-all-4digit-primes))
|
||||||
|
" ("
|
||||||
|
(length (get-free-members-ids MB))
|
||||||
|
" free)")
|
||||||
|
(let ((iids (filter (compose not is-4digit-prime?) (list-members-ids MB))))
|
||||||
|
(when (not (null? iids))
|
||||||
|
(print " Invalid: "
|
||||||
|
(length iids)
|
||||||
|
" ("
|
||||||
|
(string-intersperse (map number->string iids) ", ")
|
||||||
|
")"))))
|
||||||
|
|
||||||
;; Performs self-tests of this module.
|
;; Performs self-tests of this module.
|
||||||
(define (members-base-tests!)
|
(define (members-base-tests!)
|
||||||
(run-tests
|
(run-tests
|
||||||
|
|
11
primes.scm
11
primes.scm
|
@ -30,11 +30,13 @@
|
||||||
(
|
(
|
||||||
primes-tests!
|
primes-tests!
|
||||||
is-4digit-prime?
|
is-4digit-prime?
|
||||||
|
gen-all-4digit-primes
|
||||||
)
|
)
|
||||||
|
|
||||||
(import scheme
|
(import scheme
|
||||||
(chicken base)
|
(chicken base)
|
||||||
testing)
|
testing
|
||||||
|
utils)
|
||||||
|
|
||||||
;; Checks whether given number is prime by checking the remainder of
|
;; Checks whether given number is prime by checking the remainder of
|
||||||
;; the division by all primes less than square root of the number in
|
;; the division by all primes less than square root of the number in
|
||||||
|
@ -58,7 +60,7 @@
|
||||||
(define (gen-primes less-than . init)
|
(define (gen-primes less-than . init)
|
||||||
(let loop ((primes (if (null? init)
|
(let loop ((primes (if (null? init)
|
||||||
'(2)
|
'(2)
|
||||||
init))
|
(car init)))
|
||||||
(number 3))
|
(number 3))
|
||||||
(if (< number less-than)
|
(if (< number less-than)
|
||||||
(loop (if (check-prime primes number)
|
(loop (if (check-prime primes number)
|
||||||
|
@ -77,6 +79,11 @@
|
||||||
(<= n 9999)
|
(<= n 9999)
|
||||||
(check-prime primes<100 n)))
|
(check-prime primes<100 n)))
|
||||||
|
|
||||||
|
;; Generates all valid member ids
|
||||||
|
(define (gen-all-4digit-primes)
|
||||||
|
(filter is-4digit-prime?
|
||||||
|
(gen-primes 10000 primes<100)))
|
||||||
|
|
||||||
;; Module self-tests.
|
;; Module self-tests.
|
||||||
(define (primes-tests!)
|
(define (primes-tests!)
|
||||||
(run-tests
|
(run-tests
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue