code: def test_join():
      df1 = pd.DataFrame(
          [[1, 3, 3], [4, 2, 6], [7, 8, 9]], index=["a1", "a2", "a3"]
      )
      df2 = (
          pd.DataFrame(
              [[1, 2, 3], [1, 5, 6], [7, 8, 9]],
              index=["a1", "b2", "b3"],
          )
          + 1
      )
      df2 = pd.concat([df2, df2 + 1])
  
      mdf1 = from_pandas(df1, chunk_size=2)
      mdf2 = from_pandas(df2, chunk_size=2)
  
      parameters = [
          {"lsuffix": "l_", "rsuffix": "r_"},
          {"lsuffix": "l_", "rsuffix": "r_", "how": "left"},
          {"lsuffix": "l_", "rsuffix": "r_", "how": "right"},
          {"lsuffix": "l_", "rsuffix": "r_", "how": "inner"},
          {"lsuffix": "l_", "rsuffix": "r_", "how": "left"},
      ]
  
      for kw in parameters:
          df = mdf1.join(
              mdf2, auto_merge="none", bloom_filter=False, **kw
          )
          df = tile(df)
  
          assert df.chunk_shape == (3, 1)
          for chunk in df.chunks:
              assert isinstance(chunk.op, DataFrameMerge)
              assert chunk.op.how == kw.get("how", "left")
              left, right = chunk.op.inputs
              assert isinstance(left.op, DataFrameMergeAlign)
              assert left.op.stage == OperandStage.reduce
              assert isinstance(right.op, DataFrameMergeAlign)
              assert right.op.stage == OperandStage.reduce
              assert len(left.inputs[0].inputs) == 5
              assert len(right.inputs[0].inputs) == 5
              for lchunk in left.inputs[0].inputs:
                  assert isinstance(lchunk.op, DataFrameMergeAlign)
                  assert lchunk.op.stage == OperandStage.map
                  assert lchunk.op.index_shuffle_size == 3
                  assert lchunk.op.shuffle_on == None
              for rchunk in right.inputs[0].inputs:
                  assert isinstance(rchunk.op, DataFrameMergeAlign)
                  assert rchunk.op.stage == OperandStage.map
                  assert rchunk.op.index_shuffle_size == 3
                  assert rchunk.op.shuffle_on == None
              pd.testing.assert_index_equal(
                  chunk.columns_value.to_pandas(),
                  df.columns_value.to_pandas(),
              )
  
file_path: mars/mars/dataframe/merge/tests/test_merge.py
imports: import numpy
  import pandas
  import pytest
  from ....core import tile
  from ....core.operand import OperandStage
  from ...core import IndexValue
  from ...datasource.dataframe import from_pandas
  from ..None import DataFrameMergeAlign, DataFrameMerge, concat
label_desc: Use image node_id 3 for calling a global function with example usage: test_join() without return types