docstr: Regression test: ensure we fail before performing O(N**2) work.
code: def test_denial_of_service_prevented_int_to_str(self):
      """Regression test: ensure we fail before performing O(N**2) work."""
      maxdigits = sys.get_int_max_str_digits()
      assert maxdigits < 50_000, maxdigits  # A test prerequisite.
      get_time = time.process_time
      if (
          get_time() <= 0
      ):  # some platforms like WASM lack process_time()
          get_time = time.monotonic
  
      huge_int = int(
          f'0x{"c"*65_000}', base=16
      )  # 78268 decimal digits.
      digits = 78_268
      with support.adjust_int_max_str_digits(digits):
          start = get_time()
          huge_decimal = str(huge_int)
      seconds_to_convert = get_time() - start
      self.assertEqual(len(huge_decimal), digits)
      # Ensuring that we chose a slow enough conversion to measure.
      # It takes 0.1 seconds on a Zen based cloud VM in an opt build.
      # Some OSes have a low res 1/64s timer, skip if hard to measure.
      if seconds_to_convert < 1 / 64:
          raise unittest.SkipTest(
              '"slow" conversion took only '
              f"{seconds_to_convert} seconds."
          )
  
      # We test with the limit almost at the size needed to check performance.
      # The performant limit check is slightly fuzzy, give it a some room.
      with support.adjust_int_max_str_digits(int(0.995 * digits)):
          with self.assertRaises(ValueError) as err:
              start = get_time()
              str(huge_int)
          seconds_to_fail_huge = get_time() - start
      self.assertIn("conversion", str(err.exception))
      self.assertLessEqual(seconds_to_fail_huge, seconds_to_convert / 2)
  
      # Now we test that a conversion that would take 30x as long also fails
      # in a similarly fast fashion.
      extra_huge_int = int(
          f'0x{"c"*500_000}', base=16
      )  # 602060 digits.
      with self.assertRaises(ValueError) as err:
          start = get_time()
          # If not limited, 8 seconds said Zen based cloud VM.
          str(extra_huge_int)
      seconds_to_fail_extra_huge = get_time() - start
      self.assertIn("conversion", str(err.exception))
      self.assertLess(
          seconds_to_fail_extra_huge, seconds_to_convert / 2
      )
  
imports: import sys
  import time
  import unittest
  from unittest import mock
  from test import support
  from test.test_grammar import VALID_UNDERSCORE_LITERALS, INVALID_UNDERSCORE_LITERALS
label_desc: Use image node_id 7 for calling the IntStrDigitLimitsTests obj's underlying member method code with example usage: obj.test_denial_of_service_prevented_int_to_str() without return types