|
import random |
|
|
|
import pytest |
|
|
|
from ding.utils import SingletonMetaclass |
|
|
|
|
|
@pytest.mark.unittest |
|
def test_singleton(): |
|
global count |
|
count = 0 |
|
|
|
class A(object, metaclass=SingletonMetaclass): |
|
|
|
def __init__(self, t): |
|
self.t = t |
|
self.p = random.randint(0, 10) |
|
global count |
|
count += 1 |
|
|
|
obj = [A(i) for i in range(3)] |
|
assert count == 1 |
|
assert all([o.t == 0 for o in obj]) |
|
assert all([o.p == obj[0].p for o in obj]) |
|
assert all([id(o) == id(obj[0]) for o in obj]) |
|
assert id(A.instance) == id(obj[0]) |
|
|
|
|
|
class B(A): |
|
pass |
|
|
|
obj = [B(i) for i in range(3, 6)] |
|
assert count == 2 |
|
assert all([o.t == 3 for o in obj]) |
|
assert all([o.p == obj[0].p for o in obj]) |
|
assert all([id(o) == id(obj[0]) for o in obj]) |
|
assert id(B.instance) == id(obj[0]) |
|
|