<expr>
  <define name="x">1</define>
  <define name=".product" args="a b c d">
    <add>
      <multiply>
	<a/>
	<b/>
      </multiply>
      <multiply>
	<c/>
	<d/>
      </multiply>
    </add>
  </define>

  <and>
    <if>
      <eq>
	<get name="x"/>
	<get>x</get>
      </eq>
      <print newline="true">PASS</print>
      <expr>
	<print newline="true">FAIL</print>
	<false/>
      </expr>
    </if>

    <if>
      <eq>
	<expr>
	  <set name="x">1</set>
	  <add><x/>1</add>
	  <x/>
	</expr>
	<expr>
	  <set name="x">1</set>
	  <add><get>x</get>1</add>
	  <x/>
	</expr>
      </eq>
      <expr>
	<print newline="true">FAIL</print>
	<false/>
      </expr>
      <print newline="true">PASS</print>
    </if>

    <if>
      <eq>
	<define name=".net">4.5.50709</define>
	<get>.net</get>
      </eq>
      <print newline="true">PASS</print>
      <expr>
	<print newline="true">FAIL</print>
	<false/>
      </expr>
    </if>

    <if>
      <eq>
	<expr>
	  <define name="closure"/>
	  <set name="closure">
	    <get>.product</get>
	  </set>
	  <closure>1 2 3 4</closure>
	</expr>
	14
      </eq>
      <print newline="true">PASS</print>
      <expr>
	<print newline="true">FAIL</print>
	<false/>
      </expr>
    </if>

  </and>
</expr>
