code: def test_domain_c_ast_fundamental_types():
      def types():
          def signed(t):
              yield t
              yield "signed  " + t
              yield "unsigned  " + t
  
          # integer types
          # -------------
          yield "void"
          yield from ("_Bool", "bool")
          yield from signed("char")
          yield from signed("short")
          yield from signed("short int")
          yield from signed("int")
          yield from ("signed", "unsigned")
          yield from signed("long")
          yield from signed("long int")
          yield from signed("long long")
          yield from signed("long long int")
          yield from ("__int128", "__uint128")
          # extensions
          for t in (
              "__int8",
              "__int16",
              "__int32",
              "__int64",
              "__int128",
          ):
              yield from signed(t)
  
          # floating point types
          # --------------------
          yield from ("_Decimal32", "_Decimal64", "_Decimal128")
          for f in ("float", "double", "long double"):
              yield f
              yield from (f + "  _Complex", f + "  complex")
              yield from ("_Complex  " + f, "complex  " + f)
              yield from ("_Imaginary  " + f, "imaginary  " + f)
          # extensions
          # https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html#Floating-Types
          yield from (
              "__float80",
              "_Float64x",
              "__float128",
              "_Float128",
              "__ibm128",
          )
          # https://gcc.gnu.org/onlinedocs/gcc/Half-Precision.html#Half-Precision
          yield "__fp16"
  
          # fixed-point types (extension)
          # -----------------------------
          # https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html#Fixed-Point
          for sat in ("", "_Sat  "):
              for t in ("_Fract", "fract", "_Accum", "accum"):
                  for size in ("short  ", "", "long  ", "long long  "):
                      for tt in signed(size + t):
                          yield sat + tt
  
      for t in types():
          input = "{key}%s foo" % t
          output = " ".join(input.split())
          check("type", input, {1: "foo"}, key="typedef", output=output)
          if " " in t:
              # try permutations of all components
              tcs = t.split()
              for p in itertools.permutations(tcs):
                  input = "{key}%s foo" % " ".join(p)
                  output = " ".join(input.split())
                  check(
                      "type",
                      input,
                      {1: "foo"},
                      key="typedef",
                      output=output,
                  )
  
imports: import itertools
  import zlib
  from xml.etree import ElementTree
  import pytest
  from sphinx import addnodes
  from sphinx.addnodes import desc, desc_content, desc_name, desc_parameter, desc_parameterlist, desc_sig_name, desc_sig_space, desc_signature, desc_signature_line, pending_xref
  from sphinx.domains.c import DefinitionError, DefinitionParser, Symbol, _id_prefix, _macroKeywords, _max_id
  from sphinx.ext.intersphinx import load_mappings, normalize_intersphinx_mapping
  from sphinx.testing import restructuredtext
  from sphinx.testing.util import assert_node
  from sphinx.writers.text import STDINDENT
label_desc: Use image node_id 5 for calling a global function with example usage: test_domain_c_ast_fundamental_types() without return types