code: def test_shuffle_files(self):
      chars = "abcdefghijkl"
      train_info = self._write_tfrecord("train", 5, chars)
      ds = self.reader.read(
          instructions="train",
          split_infos=[train_info],
          shuffle_files=True,
      )
      ds = ds.batch(12).repeat(100)
      read_data = set(tuple(e) for e in tfds.as_numpy(ds))
      for batch in read_data:
          # Check that `batch` contains all the chars exactly once.
          batch_set = set(batch)
          self.assertEqual(len(batch_set), len(chars))
      # There are theoretically 5! (=120) different arrangements, but we would
      # need too many repeats to be sure to get them.
      self.assertGreater(len(set(read_data)), 10)
  
imports: import functools
  import itertools
  import os
  from unittest import mock
  import tensorflow
  import tensorflow_datasets
  from tensorflow_datasets import testing
  from tensorflow_datasets.core import example_parser
  from tensorflow_datasets.core import naming
  from tensorflow_datasets.core import reader
  from tensorflow_datasets.core import splits
  from tensorflow_datasets.core import writer
  from tensorflow_datasets.core.utils import read_config
  from tensorflow_datasets.core.utils import shard_utils
label_desc: Use image node_id 8 for calling the ReaderTest obj's underlying member method code with example usage: obj.test_shuffle_files() without return types