code: def test_concatenate_execution(setup):
      a_data = np.random.rand(10, 20, 30)
      b_data = np.random.rand(10, 20, 40)
      c_data = np.random.rand(10, 20, 50)
  
      a = tensor(a_data, chunk_size=8)
      b = tensor(b_data, chunk_size=10)
      c = tensor(c_data, chunk_size=15)
  
      d = concatenate([a, b, c], axis=-1)
      res = d.execute().fetch()
      expected = np.concatenate([a_data, b_data, c_data], axis=-1)
      np.testing.assert_array_equal(res, expected)
  
      a_data = sps.random(10, 30)
      b_data = sps.rand(10, 40)
      c_data = sps.rand(10, 50)
  
      a = tensor(a_data, chunk_size=8)
      b = tensor(b_data, chunk_size=10)
      c = tensor(c_data, chunk_size=15)
  
      d = concatenate([a, b, c], axis=-1)
      res = d.execute().fetch()
      expected = np.concatenate([a_data.A, b_data.A, c_data.A], axis=-1)
      np.testing.assert_array_equal(res.toarray(), expected)
  
file_path: mars/mars/tensor/merge/tests/test_merge_execution.py
imports: import numpy
  import scipy.sparse
  import pytest
  from ...datasource import tensor, empty, eye, ones, zeros
  from ...None import concatenate, stack, hstack, vstack, dstack, column_stack, union1d, array, block, append
label_desc: Use image node_id 1 for calling a global function with example usage: test_concatenate_execution(setup) without return types