Menu

[r760]: / trunk / lispbuilder-sdl / trivial-garbage / tests.lisp  Maximize  Restore  History

Download this file

106 lines (86 with data), 2.6 kB

  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
102
103
104
105
106
;;;; -*- Mode: lisp; indent-tabs-mode: nil -*-
;;;
;;; tests.lisp --- trivial-garbage tests.
;;;
;;; This software is placed in the public domain by Luis Oliveira
;;; <loliveira@common-lisp.net> and is provided with absolutely no
;;; warranty.
(defpackage #:trivial-garbage-tests
(:use #:cl #:trivial-garbage #:regression-test))
(in-package #:trivial-garbage-tests)
;;;; Weak Pointers
(deftest pointers.1
(weak-pointer-p (make-weak-pointer 42))
t)
(deftest pointers.2
(weak-pointer-value (make-weak-pointer 42))
42)
;;;; Weak Hashtables
#+(or :sbcl :corman)
(progn
(pushnew 'hashtables.weak-key.1 rt::*expected-failures*)
(pushnew 'hashtables.weak-key.2 rt::*expected-failures*))
(deftest hashtables.weak-key.1
(let ((ht (make-weak-hash-table :weakness :key)))
(values (hash-table-p ht)
(hash-table-weakness ht)))
t :key)
(deftest hashtables.weak-key.2
(let ((ht (make-weak-hash-table :weakness :key :test 'eq)))
(values (hash-table-p ht)
(hash-table-weakness ht)))
t :key)
#+(or :sbcl :cmu :corman)
(pushnew 'hashtables.weak-value.1 rt::*expected-failures*)
(deftest hashtables.weak-value.1
(let ((ht (make-weak-hash-table :weakness :value)))
(values (hash-table-p ht)
(hash-table-weakness ht)))
t :value)
(deftest hashtables.not-weak.1
(hash-table-weakness (make-hash-table))
nil)
;;;; Finalizers
;;;
;;; These tests are, of course, not very reliable. And they way they're
;;; written doesn't help either. :-/
(defparameter *finalized?* nil)
(defun setup-finalizers (count &optional remove)
(setq *finalized?* (make-list count))
(let ((obj (copy-seq "xpto")))
(dotimes (i count)
(let ((i i))
(finalize obj
(lambda ()
;;(assert (null *finalized?*))
(setf (nth i *finalized?*) t)))))
(when remove
(cancel-finalization obj)))
(gc :full t))
(defun do-it-to-it (setup-function &rest args)
(apply setup-function args)
(gc :full t))
(deftest finalizers.1
(progn
(do-it-to-it #'setup-finalizers 1)
(gc :full t)
(car *finalized?*))
t)
(deftest finalizers.2
(progn
(do-it-to-it #'setup-finalizers 1 t)
(gc :full t)
(car *finalized?*))
nil)
(deftest finalizers.3
(progn
(do-it-to-it #'setup-finalizers 3)
(gc :full t)
*finalized?*)
(t t t))
(deftest finalizers.4
(progn
(do-it-to-it #'setup-finalizers 3 t)
(gc :full t)
*finalized?*)
(nil nil nil))
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.