code: def test_fftn(self):
      x = random((30, 20, 10)) + 1j * random((30, 20, 10))
      assert_allclose(
          np.fft.fft(np.fft.fft(np.fft.fft(x, axis=2), axis=1), axis=0),
          np.fft.fftn(x),
          atol=1e-6,
      )
      assert_allclose(
          np.fft.fftn(x), np.fft.fftn(x, norm="backward"), atol=1e-6
      )
      assert_allclose(
          np.fft.fftn(x) / np.sqrt(30 * 20 * 10),
          np.fft.fftn(x, norm="ortho"),
          atol=1e-6,
      )
      assert_allclose(
          np.fft.fftn(x) / (30.0 * 20.0 * 10.0),
          np.fft.fftn(x, norm="forward"),
          atol=1e-6,
      )
  
imports: import numpy
  import pytest
  from numpy.random import random
  from numpy.testing import assert_array_equal, assert_raises, assert_allclose, IS_WASM
  import threading
  import queue
label_desc: Use image node_id 6 for calling the TestFFT1D obj's underlying member method code with example usage: obj.test_fftn() without return types