23 lines
1.8 KiB
Python
23 lines
1.8 KiB
Python
import unittest,tempfile
|
|
from pathlib import Path
|
|
import numpy as np
|
|
import hd_water_material10521 as m
|
|
class Water(unittest.TestCase):
|
|
def setUp(self):
|
|
self.idx=np.full((32,32),227,np.uint8);self.idx[:16]=157;self.idx[4,5]=241;self.pal=np.repeat(np.arange(256,dtype=np.uint8)[:,None],3,axis=1);self.old=np.random.default_rng(1).integers(0,256,(724,724,3),dtype=np.uint8);self.donor=np.random.default_rng(2).integers(0,256,(887,887,3),dtype=np.uint8)
|
|
def test_nonwater_exact_and_generated_contribution(self):
|
|
out,a=m.derive(self.idx,self.pal,self.old,self.donor);self.assertTrue(np.array_equal(out[362:],self.old[362:]));self.assertGreater(a['genuine_fine_band_changed_water_pixels'],0);self.assertEqual(a['nonwater_changed_pixels'],0);self.assertTrue(a['Original_protected_RGB_exact']);self.assertIn([5,4],a['original_detail_cells'])
|
|
def test_determinism_and_genuine_donor_effect(self):
|
|
a,_=m.derive(self.idx,self.pal,self.old,self.donor);b,_=m.derive(self.idx,self.pal,self.old,self.donor);self.assertTrue(np.array_equal(a,b));d=self.donor[::-1].copy();c,_=m.derive(self.idx,self.pal,self.old,d);self.assertTrue(np.any(a[:362]!=c[:362]));self.assertTrue(np.array_equal(a[362:],c[362:]))
|
|
def test_mask_cannot_change_dock(self):
|
|
self.idx[16,2]=157
|
|
with self.assertRaises(ValueError):m.derive(self.idx,self.pal,self.old,self.donor)
|
|
def test_reject_wrong_dimensions(self):
|
|
with self.assertRaises(ValueError):m.derive(self.idx,self.pal,self.old[:512],self.donor)
|
|
def test_symlink_and_escape_inputs_rejected(self):
|
|
with tempfile.TemporaryDirectory()as t:
|
|
p=Path(t);(p/'a').write_bytes(b'x');(p/'b').symlink_to(p/'a')
|
|
with self.assertRaises(OSError):m.read_contained(p,'b')
|
|
with self.assertRaises(ValueError):m.read_contained(p,'../a')
|
|
if __name__=='__main__':unittest.main()
|