|
from copy import deepcopy |
|
|
|
import numpy as np |
|
|
|
import countless2d |
|
import countless3d |
|
|
|
def test_countless2d(): |
|
def test_all_cases(fn, test_zero): |
|
case1 = np.array([ [ 1, 2 ], [ 3, 4 ] ]).reshape((2,2,1,1)) |
|
case2 = np.array([ [ 1, 1 ], [ 2, 3 ] ]).reshape((2,2,1,1)) |
|
case1z = np.array([ [ 0, 1 ], [ 2, 3 ] ]).reshape((2,2,1,1)) |
|
case2z = np.array([ [ 0, 0 ], [ 2, 3 ] ]).reshape((2,2,1,1)) |
|
case3 = np.array([ [ 1, 1 ], [ 2, 2 ] ]).reshape((2,2,1,1)) |
|
case4 = np.array([ [ 1, 2 ], [ 2, 2 ] ]).reshape((2,2,1,1)) |
|
case5 = np.array([ [ 5, 5 ], [ 5, 5 ] ]).reshape((2,2,1,1)) |
|
|
|
is_255_handled = np.array([ [ 255, 255 ], [ 1, 2 ] ], dtype=np.uint8).reshape((2,2,1,1)) |
|
|
|
test = lambda case: fn(case) |
|
|
|
if test_zero: |
|
assert test(case1z) == [[[[3]]]] |
|
assert test(case2z) == [[[[0]]]] |
|
else: |
|
assert test(case1) == [[[[4]]]] |
|
assert test(case2) == [[[[1]]]] |
|
|
|
assert test(case3) == [[[[1]]]] |
|
assert test(case4) == [[[[2]]]] |
|
assert test(case5) == [[[[5]]]] |
|
|
|
assert test(is_255_handled) == [[[[255]]]] |
|
|
|
assert fn(case1).dtype == case1.dtype |
|
|
|
test_all_cases(countless2d.simplest_countless, False) |
|
test_all_cases(countless2d.quick_countless, False) |
|
test_all_cases(countless2d.quickest_countless, False) |
|
test_all_cases(countless2d.stippled_countless, False) |
|
|
|
|
|
|
|
methods = [ |
|
countless2d.zero_corrected_countless, |
|
countless2d.countless, |
|
countless2d.countless_if, |
|
|
|
] |
|
|
|
for fn in methods: |
|
print(fn.__name__) |
|
test_all_cases(fn, True) |
|
|
|
def test_stippled_countless2d(): |
|
a = np.array([ [ 1, 2 ], [ 3, 4 ] ]).reshape((2,2,1,1)) |
|
b = np.array([ [ 0, 2 ], [ 3, 4 ] ]).reshape((2,2,1,1)) |
|
c = np.array([ [ 1, 0 ], [ 3, 4 ] ]).reshape((2,2,1,1)) |
|
d = np.array([ [ 1, 2 ], [ 0, 4 ] ]).reshape((2,2,1,1)) |
|
e = np.array([ [ 1, 2 ], [ 3, 0 ] ]).reshape((2,2,1,1)) |
|
f = np.array([ [ 0, 0 ], [ 3, 4 ] ]).reshape((2,2,1,1)) |
|
g = np.array([ [ 0, 2 ], [ 0, 4 ] ]).reshape((2,2,1,1)) |
|
h = np.array([ [ 0, 2 ], [ 3, 0 ] ]).reshape((2,2,1,1)) |
|
i = np.array([ [ 1, 0 ], [ 0, 4 ] ]).reshape((2,2,1,1)) |
|
j = np.array([ [ 1, 2 ], [ 0, 0 ] ]).reshape((2,2,1,1)) |
|
k = np.array([ [ 1, 0 ], [ 3, 0 ] ]).reshape((2,2,1,1)) |
|
l = np.array([ [ 1, 0 ], [ 0, 0 ] ]).reshape((2,2,1,1)) |
|
m = np.array([ [ 0, 2 ], [ 0, 0 ] ]).reshape((2,2,1,1)) |
|
n = np.array([ [ 0, 0 ], [ 3, 0 ] ]).reshape((2,2,1,1)) |
|
o = np.array([ [ 0, 0 ], [ 0, 4 ] ]).reshape((2,2,1,1)) |
|
z = np.array([ [ 0, 0 ], [ 0, 0 ] ]).reshape((2,2,1,1)) |
|
|
|
test = countless2d.stippled_countless |
|
|
|
|
|
|
|
|
|
|
|
|
|
assert test(a) == [[[[4]]]] |
|
assert test(b) == [[[[4]]]] |
|
assert test(c) == [[[[4]]]] |
|
assert test(d) == [[[[4]]]] |
|
assert test(e) == [[[[1]]]] |
|
assert test(f) == [[[[4]]]] |
|
assert test(g) == [[[[4]]]] |
|
assert test(h) == [[[[2]]]] |
|
assert test(i) == [[[[4]]]] |
|
assert test(j) == [[[[1]]]] |
|
assert test(k) == [[[[1]]]] |
|
assert test(l) == [[[[1]]]] |
|
assert test(m) == [[[[2]]]] |
|
assert test(n) == [[[[3]]]] |
|
assert test(o) == [[[[4]]]] |
|
assert test(z) == [[[[0]]]] |
|
|
|
bc = np.array([ [ 0, 2 ], [ 2, 4 ] ]).reshape((2,2,1,1)) |
|
bd = np.array([ [ 0, 2 ], [ 3, 2 ] ]).reshape((2,2,1,1)) |
|
cd = np.array([ [ 0, 2 ], [ 3, 3 ] ]).reshape((2,2,1,1)) |
|
|
|
assert test(bc) == [[[[2]]]] |
|
assert test(bd) == [[[[2]]]] |
|
assert test(cd) == [[[[3]]]] |
|
|
|
ab = np.array([ [ 1, 1 ], [ 0, 4 ] ]).reshape((2,2,1,1)) |
|
ac = np.array([ [ 1, 2 ], [ 1, 0 ] ]).reshape((2,2,1,1)) |
|
ad = np.array([ [ 1, 0 ], [ 3, 1 ] ]).reshape((2,2,1,1)) |
|
|
|
assert test(ab) == [[[[1]]]] |
|
assert test(ac) == [[[[1]]]] |
|
assert test(ad) == [[[[1]]]] |
|
|
|
def test_countless3d(): |
|
def test_all_cases(fn): |
|
alldifferent = [ |
|
[ |
|
[1,2], |
|
[3,4], |
|
], |
|
[ |
|
[5,6], |
|
[7,8] |
|
] |
|
] |
|
allsame = [ |
|
[ |
|
[1,1], |
|
[1,1], |
|
], |
|
[ |
|
[1,1], |
|
[1,1] |
|
] |
|
] |
|
|
|
assert fn(np.array(alldifferent)) == [[[8]]] |
|
assert fn(np.array(allsame)) == [[[1]]] |
|
|
|
twosame = deepcopy(alldifferent) |
|
twosame[1][1][0] = 2 |
|
|
|
assert fn(np.array(twosame)) == [[[2]]] |
|
|
|
threemixed = [ |
|
[ |
|
[3,3], |
|
[1,2], |
|
], |
|
[ |
|
[2,4], |
|
[4,3] |
|
] |
|
] |
|
assert fn(np.array(threemixed)) == [[[3]]] |
|
|
|
foursame = [ |
|
[ |
|
[4,4], |
|
[1,2], |
|
], |
|
[ |
|
[2,4], |
|
[4,3] |
|
] |
|
] |
|
|
|
assert fn(np.array(foursame)) == [[[4]]] |
|
|
|
fivesame = [ |
|
[ |
|
[5,4], |
|
[5,5], |
|
], |
|
[ |
|
[2,4], |
|
[5,5] |
|
] |
|
] |
|
|
|
assert fn(np.array(fivesame)) == [[[5]]] |
|
|
|
def countless3d_generalized(img): |
|
return countless3d.countless_generalized(img, (2,2,2)) |
|
def countless3d_dynamic_generalized(img): |
|
return countless3d.dynamic_countless_generalized(img, (2,2,2)) |
|
|
|
methods = [ |
|
countless3d.countless3d, |
|
countless3d.dynamic_countless3d, |
|
countless3d_generalized, |
|
countless3d_dynamic_generalized, |
|
] |
|
|
|
for fn in methods: |
|
test_all_cases(fn) |