code: def test_concatenate():
      a = ones((10, 20, 30), chunk_size=10)
      b = ones((20, 20, 30), chunk_size=20)
  
      c = concatenate([a, b])
      assert c.shape == (30, 20, 30)
  
      a = ones((10, 20, 30), chunk_size=10)
      b = ones((10, 20, 40), chunk_size=20)
  
      c = concatenate([a, b], axis=-1)
      assert c.shape == (10, 20, 70)
  
      with pytest.raises(ValueError):
          a = ones((10, 20, 30), chunk_size=10)
          b = ones((20, 30, 30), chunk_size=20)
  
          concatenate([a, b])
  
      with pytest.raises(ValueError):
          a = ones((10, 20, 30), chunk_size=10)
          b = ones((20, 20), chunk_size=20)
  
          concatenate([a, b])
  
      a = ones((10, 20, 30), chunk_size=5)
      b = ones((20, 20, 30), chunk_size=10)
  
      a, c = tile(a, concatenate([a, b]))
      assert c.chunk_shape[0] == 4
      assert c.chunk_shape[1] == 4
      assert c.chunk_shape[2] == 6
      assert c.nsplits == ((5, 5, 10, 10), (5,) * 4, (5,) * 6)
      assert c.cix[0, 0, 0].key == a.cix[0, 0, 0].key
      assert c.cix[1, 0, 0].key == a.cix[1, 0, 0].key
  
imports: import numpy
  import pytest
  from ....core import tile
  from ...datasource import ones, empty
  from ..None import concatenate, stack
label_desc: Use image node_id 1 for calling a global function with example usage: test_concatenate() without return types