<?xml version="1.0" encoding="UTF-8"?>
<Mission xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="Tethys"
         xmlns:Guidance="Tethys/Guidance"
         xmlns:Units="Tethys/Units"
         xsi:schemaLocation="Tethys http://okeanids.mbari.org/tethys/Xml/Tethys.xsd
                             Tethys/Guidance http://okeanids.mbari.org/tethys/Xml/Guidance.xsd
                             Tethys/Units http://okeanids.mbari.org/tethys/Xml/Units.xsd"
       Id="TestMission">

<!--
TEST_WITH_VALGRIND
TEST_CODE_START

passed = True

TEST_CODE_END
    -->

    <DefineArg Name="Foo"><Units:second/><Value>0</Value></DefineArg>

    <DefineArg Name="Bar"><Units:second/><Value>0</Value></DefineArg>

    <DefineArg Name="Baz"><Units:second/><Value>[0,0]</Value></DefineArg>

<!--
    #### Assign uninitialized scratchpad
    -->

    <Assign><Sequence/><Arg Name="Foo"/><CustomUri Uri="_.foo"/></Assign>

<!--
    #### Use uninitialized scratchpad in a Syslog
    -->

    <Syslog>Uninitialized _.foo = <CustomUri Uri="_.foo"/><Units:second/></Syslog>

    <Syslog>Uninitialized _.foo assigned to Foo = <Arg Name="Foo"/><Units:second/></Syslog>

    <Aggregate>

        <Sequence/>

        <Break>
            <IsNaN><Arg Name="Foo"/>
            </IsNaN>
            <And><IsNaN><CustomUri Uri="_.foo"/>
            </IsNaN></And>
        </Break>

        <Syslog Severity="Critical">Foo is <Arg Name="Foo"/><Units:second/> and _.foo is <CustomUri Uri="_.foo"/><Units:second/>, not NaN</Syslog>

    </Aggregate>

<!--
    #### Initialize scratchpad via command line
    -->

    <Guidance:Execute>
        <Sequence/>
        <Setting><Guidance:Execute.command/><String>set _.bar 1 meter</String></Setting>
    </Guidance:Execute>

    <Guidance:Execute>
        <Sequence/>
        <Setting><Guidance:Execute.command/><String>get _.bar</String></Setting>
    </Guidance:Execute>

<!--
    #### Use initialized scratchpad in a Syslog
    -->

    <Syslog>Initialized _.bar = <CustomUri Uri="_.bar"/><Units:millimeter/></Syslog>

<!--
    #### Assign initialized scratchpad
    -->

    <Assign><Sequence/><Arg Name="Bar"/><CustomUri Uri="_.bar"/></Assign>

    <Syslog>Initialized _.bar assigned to Bar = <Arg Name="Bar"/><Units:second/></Syslog>

    <Aggregate>

        <Sequence/>

        <Break><CustomUri Uri="_.bar"/>
            <Eq><Units:meter/><Value>1.0</Value></Eq>
        </Break>

        <Syslog Severity="Critical">_.bar is <CustomUri Uri="_.bar"/><Units:meter/>, not 1 meter</Syslog>

    </Aggregate>

    <Aggregate>

        <Sequence/>

        <Break><Arg Name="Bar"/>
            <Eq><Units:meter/><Value>1.0</Value></Eq>
        </Break>

        <Syslog Severity="Critical">Bar is <Arg Name="Bar"/><Units:meter/>, not 1 meter</Syslog>

    </Aggregate>

<!--
    #### Assign uninitialized scratchpad
    -->

    <Assign><Sequence/><Arg Name="Baz"/><CustomUri Uri="#.baz"/></Assign>

<!--
    #### Assign to uninitialized scratchpad
    -->

    <Assign><Sequence/><CustomUri Uri="#.baz"/><Units:meter/><Value>[2.0,3.0]</Value></Assign>

<!--
    #### Assign initialized scratchpad
    -->

    <Assign><Sequence/><Arg Name="Baz"/><CustomUri Uri="#.baz"/></Assign>

<!--
    #### Use initialized scratchpad in a Syslog
    -->

    <Syslog>Initialized #.baz = <CustomUri Uri="#.baz"/><Units:millimeter/></Syslog>

    <Syslog>Initialized #.baz assigned to Baz = <Arg Name="Baz"/><Units:second/></Syslog>

    <Aggregate>

        <Sequence/>

        <Break><CustomUri Uri="#.baz"/>
            <Eq><Units:meter/><Value>[2.0,3.0]</Value></Eq>
        </Break>

        <Syslog Severity="Critical">#.baz is <CustomUri Uri="#.baz"/><Units:meter/>, not [2.0,3.0] meter</Syslog>

    </Aggregate>

    <Aggregate>

        <Sequence/>

        <Break><Arg Name="Baz"/>
            <Eq><Units:meter/><Value>[2.0,3.0]</Value></Eq>
        </Break>

        <Syslog Severity="Critical">Baz is <Arg Name="Baz"/><Units:meter/>, not [2.0,3.0] meter</Syslog>

    </Aggregate>

    <Syslog>Done</Syslog>

</Mission>
