def test_read_resize_write_larger_values(self):
        '''
        Check if the number different pixels between images is not more than were changed.
        '''

        imgs = np.zeros([10, 32, 64])
        perc_pixels_changed = (10 * 20) / imgs[0].size
        for i in range(10):
            start_r, end_r = i, i + 10
            start_c, end_c = i * 3, i * 3 + 20
            imgs[i, start_r:end_r, start_c:end_c] = 255

        with TemporaryDirectory() as tmp_dir:
            fpaths = [os.path.join(tmp_dir, '0{}.png'.format(i)) for i in range(10)]
            write_fpaths = [os.path.splitext(fpath)[0] + '_write.png' for fpath in fpaths]

            for fpath, img in zip(fpaths, imgs):
                cv2.imwrite(fpath, img)

            for read_fpath, write_fpath in zip(fpaths, write_fpaths):
                read_resize_write(read_fpath, write_fpath, 64, 128, 0.0)

            for read_fpath, write_fpath in zip(fpaths, write_fpaths):
                original_img = cv2.cvtColor(cv2.imread(read_fpath), cv2.COLOR_BGR2GRAY)
                resized_img = cv2.cvtColor(cv2.imread(write_fpath), cv2.COLOR_BGR2GRAY)
                unresized_img = cv2.resize(resized_img, (64, 32))
                diff = original_img - unresized_img
                perc_pixels_diff = np.sum(diff != 0) / diff.size
                self.assertTrue(perc_pixels_diff < perc_pixels_changed) 
    def test_read_resize_write_over_tol(self):
        '''
        Files not written if desired and actual aspect ratios over aspect_ratio_tol. 
        '''

        img = np.uint8(np.random.uniform(0, 255, size = (64, 32)))

        with TemporaryDirectory() as tmp_dir:
            read_fpath = os.path.join(tmp_dir, 'dataset' 'test_img.png')
            write_fpath = os.path.join(tmp_dir, 'dataset_resize', 'test_img_resize.png')
            cv2.imwrite(read_fpath, img)

            read_resize_write(read_fpath, write_fpath, 32, 64, aspect_ratio_tol = 1.0)
            self.assertTrue('dataset_resize' not in os.listdir(tmp_dir))
    def test_read_resize_write_ValueError(self):
        '''
        Negative aspect_ratio_tol raises ValueError.
        '''

        imgs = [np.uint8(np.random.uniform(0, 255, size = (64, 128))) for _ in range(10)]

        with TemporaryDirectory() as tmp_dir:
            fpaths = [os.path.join(tmp_dir, '0{}.png'.format(i)) for i in range(10)]
            write_fpaths = [os.path.splitext(fpath)[0] + '_write.png' for fpath in fpaths]

            for fpath, img in zip(fpaths, imgs):
                cv2.imwrite(fpath, img)

            with self.assertRaises(ValueError):
                read_resize_write(fpaths[0], write_fpaths[0], 32, 64, -10.0)
    def test_read_resize_write_n_files(self):
        '''
        Number of files in directory equals number of files resized and written.
        '''

        imgs = [np.uint8(np.random.uniform(0, 255, size = (64, 128))) for _ in range(10)]

        with TemporaryDirectory() as tmp_dir:
            fpaths = [os.path.join(tmp_dir, '0{}.png'.format(i)) for i in range(10)]
            write_fpaths = [os.path.splitext(fpath)[0] + '_write.png' for fpath in fpaths]

            for fpath, img in zip(fpaths, imgs):
                cv2.imwrite(fpath, img)

            for read_fpath, write_fpath in zip(fpaths, write_fpaths):
                read_resize_write(read_fpath, write_fpath, 32, 64, 0.0)
            
            for fpath in write_fpaths:
                self.assertTrue(os.path.split(fpath)[1] in os.listdir(tmp_dir))
    def test_read_resize_write_shape(self):
        '''
        Ouput shapes are equal to the desired shape.
        '''

        imgs = [np.uint8(np.random.uniform(0, 255, size = (64, 128))) for _ in range(10)]

        with TemporaryDirectory() as tmp_dir:
            fpaths = [os.path.join(tmp_dir, '0{}.png'.format(i)) for i in range(10)]
            write_fpaths = [os.path.splitext(fpath)[0] + '_write.png' for fpath in fpaths]

            for fpath, img in zip(fpaths, imgs):
                cv2.imwrite(fpath, img)

            for read_fpath, write_fpath in zip(fpaths, write_fpaths):
                read_resize_write(read_fpath, write_fpath, 32, 64, 0.0)

            for fpath in write_fpaths:
                resized_img = cv2.imread(fpath)
                self.assertCountEqual(resized_img.shape[:2], [32, 64])