code: def test_associativity_in_bin_num_expr(op1, op2):
      expr1 = ast.BinNumExpr(
          left=ast.NumVal(1.0),
          right=ast.BinNumExpr(
              left=ast.NumVal(1.0), right=ast.NumVal(1.0), op=op2
          ),
          op=op1,
      )
      if op1 in {ast.BinNumOpType.ADD, ast.BinNumOpType.MUL}:
          op_code_line = (
              f"1.0_f64 {op1.value} 1.0_f64 {op2.value} 1.0_f64"
          )
      else:
          op_code_line = (
              f"1.0_f64 {op1.value} (1.0_f64 {op2.value} 1.0_f64)"
          )
      expected_code1 = f"""
  fn score(input: Vec<f64>) -> f64 {{
      {op_code_line}
  }}
  """
  
      expr2 = ast.BinNumExpr(
          left=ast.BinNumExpr(
              left=ast.NumVal(1.0), right=ast.NumVal(1.0), op=op1
          ),
          right=ast.NumVal(1.0),
          op=op2,
      )
      expected_code2 = f"""
  fn score(input: Vec<f64>) -> f64 {{
      1.0_f64 {op1.value} 1.0_f64 {op2.value} 1.0_f64
  }}
  """
  
      interpreter = RustInterpreter()
      assert_code_equal(interpreter.interpret(expr1), expected_code1)
      assert_code_equal(interpreter.interpret(expr2), expected_code2)
  
imports: from itertools import product
  import pytest
  from m2cgen import ast
  from m2cgen.interpreters import RustInterpreter
  from tests.utils import assert_code_equal
label_desc: Use image node_id 3 for calling a global function with example usage: test_associativity_in_bin_num_expr(op1, op2) without return types