code: def test_type_shape(
      self, input_data, expected_type, expected_count, expected_shape
  ):
      results = []
      for p in TEST_NDARRAYS + (None,):
          input_data = deepcopy(input_data)
          if p is not None:
              input_data["indices"] = p(input_data["indices"])
          set_determinism(0)
          result = generate_label_classes_crop_centers(**input_data)
          self.assertIsInstance(result, expected_type)
          self.assertEqual(len(result), expected_count)
          self.assertEqual(len(result[0]), expected_shape)
          # check for consistency between numpy, torch and torch.cuda
          results.append(result)
          if len(results) > 1:
              for x, y in zip(result[0], result[-1]):
                  assert_allclose(x, y, type_test=False)
  
file_path: MONAI/tests/test_generate_label_classes_crop_centers.py
imports: from __future__ import annotations
  import unittest
  from copy import deepcopy
  from parameterized import parameterized
  from monai.transforms import generate_label_classes_crop_centers
  from monai.utils.misc import set_determinism
  from tests.utils import TEST_NDARRAYS, assert_allclose
label_desc: Use image node_id 1 for calling the TestGenerateLabelClassesCropCenters obj's underlying member method code with example usage: obj.test_type_shape(input_data, expected_type, expected_count, expected_shape) without return types