code: def test_concat_join_series(ignore_index, sort, join, axis):
      s1 = gd.Series(["a", "b", "c"])
      s2 = gd.Series(["a", "b"])
      s3 = gd.Series(["a", "b", "c", "d"])
      s4 = gd.Series()
  
      ps1 = s1.to_pandas()
      ps2 = s2.to_pandas()
      ps3 = s3.to_pandas()
      ps4 = s4.to_pandas()
  
      expected = pd.concat(
          [ps1, ps2, ps3, ps4],
          sort=sort,
          join=join,
          ignore_index=ignore_index,
          axis=axis,
      )
      actual = gd.concat(
          [s1, s2, s3, s4],
          sort=sort,
          join=join,
          ignore_index=ignore_index,
          axis=axis,
      )
  
      if PANDAS_GE_150:
          assert_eq(
              expected,
              actual,
              check_index_type=True,
          )
      else:
          # special handling of check_index_type required below:
          # https://github.com/pandas-dev/pandas/issues/46675
          # https://github.com/pandas-dev/pandas/issues/47501
          assert_eq(
              expected,
              actual,
              check_index_type=(axis == 0),
          )
  
imports: from decimal import Decimal
  import numpy
  import pandas
  import pytest
  import cudf
  from cudf.api.types import is_categorical_dtype
  from cudf.core._compat import PANDAS_GE_150, PANDAS_LT_140
  from cudf.core.dtypes import Decimal32Dtype, Decimal64Dtype, Decimal128Dtype
  from cudf.testing._utils import assert_eq, assert_exceptions_equal
label_desc: Use image node_id 33 for calling a global function with example usage: test_concat_join_series(ignore_index, sort, join, axis) without return types