code: def test_basic():
      t = BoostBuild.Tester(use_test_config=False)
  
      t.write(
          "jamroot.jam",
          """\
  exe a1 : a1.cpp : <conditional>@a1-rule ;
  rule a1-rule ( properties * )
  {
      if <variant>debug in $(properties)
      {
          return <define>OK ;
      }
  }
  
  exe a2 : a2.cpp : <conditional>@$(__name__).a2-rule
      <variant>debug:<optimization>speed ;
  rule a2-rule ( properties * )
  {
      if <optimization>speed in $(properties)
      {
          return <define>OK ;
      }
  }
  
  exe a3 : a3.cpp :
      <conditional>@$(__name__).a3-rule-1
      <conditional>@$(__name__).a3-rule-2 ;
  rule a3-rule-1 ( properties * )
  {
      if <optimization>speed in $(properties)
      {
          return <define>OK ;
      }
  }
  rule a3-rule-2 ( properties * )
  {
      if <variant>debug in $(properties)
      {
          return <optimization>speed ;
      }
  }
  """,
      )
  
      t.write("a1.cpp", "#ifdef OK\nint main() {}\n#endif\n")
      t.write("a2.cpp", "#ifdef OK\nint main() {}\n#endif\n")
      t.write("a3.cpp", "#ifdef OK\nint main() {}\n#endif\n")
  
      t.run_build_system()
  
      t.expect_addition("bin/$toolset/debug*/a1.exe")
      t.expect_addition("bin/$toolset/debug/optimization-speed*/a2.exe")
      t.expect_addition("bin/$toolset/debug/optimization-speed*/a3.exe")
  
      t.cleanup()
  
label_desc: Use image node_id 1 for calling a global function with example usage: test_basic() without return types