[Python-checkins] CVS: python/dist/src/Lib/test test_gc.py,1.4,1.5

Neil Schemenauer python-dev@python.org
Fri, 22 Sep 2000 08:26:24 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv22277/Lib/test

Modified Files:
	test_gc.py 
Log Message:
- Add test for new SAVEALL debugging flag
- Use exceptions rather than asserts for failing tests.
- Reorganize tests and produce some output if verbose option is set.


Index: test_gc.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gc.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** test_gc.py	2000/09/15 22:32:29	1.4
--- test_gc.py	2000/09/22 15:26:20	1.5
***************
*** 1,4 ****
--- 1,19 ----
+ from test_support import verbose, TestFailed
  import gc
  
+ def run_test(name, thunk):
+     if verbose:
+         print "testing %s..." % name,
+     try:
+         thunk()
+     except TestFailed:
+         if verbose:
+             print "failed (expected %s but got %s)" % (result,
+                                                        test_result)
+         raise TestFailed, name
+     else:
+         if verbose:
+             print "ok"
+ 
  def test_list():
      l = []
***************
*** 6,10 ****
      gc.collect()
      del l
!     assert gc.collect() == 1
  
  def test_dict():
--- 21,26 ----
      gc.collect()
      del l
!     if gc.collect() != 1:
!         raise TestFailed
  
  def test_dict():
***************
*** 13,17 ****
      gc.collect()
      del d
!     assert gc.collect() == 1
  
  def test_tuple():
--- 29,34 ----
      gc.collect()
      del d
!     if gc.collect() != 1:
!         raise TestFailed
  
  def test_tuple():
***************
*** 23,27 ****
      del t
      del l
!     assert gc.collect() == 2
  
  def test_class():
--- 40,45 ----
      del t
      del l
!     if gc.collect() != 2:
!         raise TestFailed
  
  def test_class():
***************
*** 31,35 ****
      gc.collect()
      del A
!     assert gc.collect() > 0
  
  def test_instance():
--- 49,54 ----
      gc.collect()
      del A
!     if gc.collect() == 0:
!         raise TestFailed
  
  def test_instance():
***************
*** 40,44 ****
      gc.collect()
      del a
!     assert gc.collect() > 0
  
  def test_method():
--- 59,64 ----
      gc.collect()
      del a
!     if gc.collect() == 0:
!         raise TestFailed
  
  def test_method():
***************
*** 50,54 ****
      gc.collect()
      del a
!     assert gc.collect() > 0
  
  def test_finalizer():
--- 70,75 ----
      gc.collect()
      del a
!     if gc.collect() == 0:
!         raise TestFailed
  
  def test_finalizer():
***************
*** 65,73 ****
      b.b = b
      gc.collect()
-     gc.garbage[:] = []
      del a
      del b
!     assert gc.collect() > 0
!     assert id(gc.garbage[0]) == id_a
  
  def test_function():
--- 86,100 ----
      b.b = b
      gc.collect()
      del a
      del b
!     if gc.collect() == 0:
!         raise TestFailed
!     for obj in gc.garbage:
!         if id(obj) == id_a:
!             del obj.a
!             break
!     else:
!         raise TestFailed
!     gc.garbage.remove(obj)
  
  def test_function():
***************
*** 78,82 ****
      gc.collect()
      del d
!     assert gc.collect() == 2
  
  def test_del():
--- 105,131 ----
      gc.collect()
      del d
!     if gc.collect() != 2:
!         raise TestFailed
! 
! def test_saveall():
!     # Verify that cyclic garbage like lists show up in gc.garbage if the
!     # SAVEALL option is enabled.
!     debug = gc.get_debug()
!     gc.set_debug(debug | gc.DEBUG_SAVEALL)
!     l = []
!     l.append(l)
!     id_l = id(l)
!     del l
!     gc.collect()
!     try:
!         for obj in gc.garbage:
!             if id(obj) == id_l:
!                 del obj[:]
!                 break
!         else:
!             raise TestFailed
!         gc.garbage.remove(obj)
!     finally:
!         gc.set_debug(debug)
  
  def test_del():
***************
*** 97,121 ****
  
  def test_all():
! 
      enabled = gc.isenabled()
      gc.disable()
!     assert not gc.isenabled()
! 
!     test_list()
!     test_dict()
!     test_tuple()
!     test_class()
!     test_instance()
!     test_method()
!     test_finalizer()
!     test_function()
!     test_del()
! 
!     # test gc.enable() even if GC is disabled by default
!     gc.enable()
!     assert gc.isenabled()
!     if not enabled:
!         gc.disable()
  
  
! test_all()
--- 146,182 ----
  
  def test_all():
!     run_test("lists", test_list)
!     run_test("dicts", test_dict)
!     run_test("tuples", test_tuple)
!     run_test("classes", test_class)
!     run_test("instances", test_instance)
!     run_test("methods", test_method)
!     run_test("functions", test_function)
!     run_test("finalizers", test_finalizer)
!     run_test("__del__", test_del)
!     run_test("saveall", test_saveall)
! 
! def test():
!     if verbose:
!         print "disabling automatic collection"
      enabled = gc.isenabled()
      gc.disable()
!     assert not gc.isenabled() 
!     debug = gc.get_debug()
!     gc.set_debug(debug & ~gc.DEBUG_LEAK) # this test is supposed to leak
! 
!     try:
!         test_all()
!     finally:
!         gc.set_debug(debug)
!         # test gc.enable() even if GC is disabled by default
!         if verbose:
!             print "restoring automatic collection"
!         # make sure to always test gc.enable()
!         gc.enable()
!         assert gc.isenabled()
!         if not enabled:
!             gc.disable()
  
  
! test()