code: def test_softmax_expr():
      expr = ast.SoftmaxExpr([ast.NumVal(2.0), ast.NumVal(3.0)])
  
      expected_code = """
  #include <string.h>
  void softmax(double *x, int size, double *result) {
      double max = x[0];
      for (int i = 1; i < size; ++i) {
          if (x[i] > max)
              max = x[i];
      }
      double sum = 0.0;
      for (int i = 0; i < size; ++i) {
          result[i] = exp(x[i] - max);
          sum += result[i];
      }
      for (int i = 0; i < size; ++i)
          result[i] /= sum;
  }
  void score(double * input, double * output) {
      double var0[2];
      softmax((double[]){2.0, 3.0}, 2, var0);
      memcpy(output, var0, 2 * sizeof(double));
  }
  """
  
      interpreter = CInterpreter()
      assert_code_equal(interpreter.interpret(expr), expected_code)
  
imports: from itertools import product
  import pytest
  from m2cgen import ast
  from m2cgen.interpreters import CInterpreter
  from tests.utils import assert_code_equal
label_desc: Use image node_id 18 for calling a global function with example usage: test_softmax_expr() without return types