test_diff.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/usr/bin/env python
  2. #
  3. # Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
  4. # Copyright (c) 2008-2016 California Institute of Technology.
  5. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation.
  6. # License: 3-clause BSD. The full license text is available at:
  7. # - https://github.com/uqfoundation/dill/blob/master/LICENSE
  8. from dill import __diff as diff
  9. import sys
  10. IS_PYPY = not hasattr(sys, 'getrefcount')
  11. class A:
  12. pass
  13. def test_diff():
  14. a = A()
  15. b = A()
  16. c = A()
  17. a.a = b
  18. b.a = c
  19. diff.memorise(a)
  20. assert not diff.has_changed(a)
  21. c.a = 1
  22. assert diff.has_changed(a)
  23. diff.memorise(c, force=True)
  24. assert not diff.has_changed(a)
  25. c.a = 2
  26. assert diff.has_changed(a)
  27. changed = diff.whats_changed(a)
  28. assert list(changed[0].keys()) == ["a"]
  29. assert not changed[1]
  30. a2 = []
  31. b2 = [a2]
  32. c2 = [b2]
  33. diff.memorise(c2)
  34. assert not diff.has_changed(c2)
  35. a2.append(1)
  36. assert diff.has_changed(c2)
  37. changed = diff.whats_changed(c2)
  38. assert changed[0] == {}
  39. assert changed[1]
  40. a3 = {}
  41. b3 = {1: a3}
  42. c3 = {1: b3}
  43. diff.memorise(c3)
  44. assert not diff.has_changed(c3)
  45. a3[1] = 1
  46. assert diff.has_changed(c3)
  47. changed = diff.whats_changed(c3)
  48. assert changed[0] == {}
  49. assert changed[1]
  50. if not IS_PYPY:
  51. import abc
  52. # make sure the "_abc_invaldation_counter" doesn't make test fail
  53. diff.memorise(abc.ABCMeta, force=True)
  54. assert not diff.has_changed(abc)
  55. abc.ABCMeta.zzz = 1
  56. assert diff.has_changed(abc)
  57. changed = diff.whats_changed(abc)
  58. assert list(changed[0].keys()) == ["ABCMeta"]
  59. assert not changed[1]
  60. '''
  61. import Queue
  62. diff.memorise(Queue, force=True)
  63. assert not diff.has_changed(Queue)
  64. Queue.Queue.zzz = 1
  65. assert diff.has_changed(Queue)
  66. changed = diff.whats_changed(Queue)
  67. assert list(changed[0].keys()) == ["Queue"]
  68. assert not changed[1]
  69. import math
  70. diff.memorise(math, force=True)
  71. assert not diff.has_changed(math)
  72. math.zzz = 1
  73. assert diff.has_changed(math)
  74. changed = diff.whats_changed(math)
  75. assert list(changed[0].keys()) == ["zzz"]
  76. assert not changed[1]
  77. '''
  78. a = A()
  79. b = A()
  80. c = A()
  81. a.a = b
  82. b.a = c
  83. diff.memorise(a)
  84. assert not diff.has_changed(a)
  85. c.a = 1
  86. assert diff.has_changed(a)
  87. diff.memorise(c, force=True)
  88. assert not diff.has_changed(a)
  89. del c.a
  90. assert diff.has_changed(a)
  91. changed = diff.whats_changed(a)
  92. assert list(changed[0].keys()) == ["a"]
  93. assert not changed[1]
  94. if __name__ == '__main__':
  95. test_diff()