code: def test_validate_global_rank_world_size(self) -> None:
      with self.assertRaisesRegex(
          ValueError, "Invalid world_size value provided"
      ):
          world_size = -1
          rank = 0
          _validate_global_rank_world_size(
              world_size=world_size, rank=rank
          )
  
      with self.assertRaisesRegex(
          ValueError, "Invalid rank value provided"
      ):
          world_size = 2
          rank = -1
          _validate_global_rank_world_size(
              world_size=world_size, rank=rank
          )
  
      with self.assertRaisesRegex(
          ValueError, "Invalid rank and world_size values provided"
      ):
          world_size = 8
          rank = 8
          _validate_global_rank_world_size(
              world_size=world_size, rank=rank
          )
  
imports: import os
  import unittest
  from typing import Literal, Optional, Union
  from unittest.mock import MagicMock, patch
  from urllib.parse import parse_qs, urlparse
  import torch
  import torch.distributed
  import torch.distributed.launcher
  from pyre_extensions import none_throws
  from torchtnt.utils.distributed import _validate_global_rank_world_size, all_gather_tensors, destroy_process_group, get_file_init_method, get_global_rank, get_local_rank, get_local_world_size, get_process_group_backend_from_device, get_tcp_init_method, get_world_size, PGWrapper, rank_zero_fn, revert_sync_batchnorm, sync_bool
  from torchtnt.utils.test_utils import get_pet_launch_config
label_desc: Use image node_id 30 for calling the DistributedTest obj's underlying member method code with example usage: obj.test_validate_global_rank_world_size() without return types