digital_test_runner 0.1.0

Parse and run tests used in hnemann's Digital logic designer and circuit simulator.
Documentation
<?xml version="1.0" encoding="utf-8"?>
<circuit>
  <version>2</version>
  <attributes/>
  <visualElements>
    <visualElement>
      <elementName>Add</elementName>
      <elementAttributes>
        <entry>
          <string>Bits</string>
          <int>4</int>
        </entry>
      </elementAttributes>
      <pos x="400" y="240"/>
    </visualElement>
    <visualElement>
      <elementName>Const</elementName>
      <elementAttributes>
        <entry>
          <string>Bits</string>
          <int>4</int>
        </entry>
      </elementAttributes>
      <pos x="380" y="260"/>
    </visualElement>
    <visualElement>
      <elementName>Const</elementName>
      <elementAttributes>
        <entry>
          <string>Value</string>
          <long>0</long>
        </entry>
      </elementAttributes>
      <pos x="380" y="280"/>
    </visualElement>
    <visualElement>
      <elementName>Clock</elementName>
      <elementAttributes>
        <entry>
          <string>Label</string>
          <string>CLK</string>
        </entry>
        <entry>
          <string>Frequency</string>
          <int>2</int>
        </entry>
      </elementAttributes>
      <pos x="320" y="540"/>
    </visualElement>
    <visualElement>
      <elementName>Multiplexer</elementName>
      <elementAttributes>
        <entry>
          <string>Bits</string>
          <int>4</int>
        </entry>
      </elementAttributes>
      <pos x="520" y="280"/>
    </visualElement>
    <visualElement>
      <elementName>Const</elementName>
      <elementAttributes>
        <entry>
          <string>Value</string>
          <long>0</long>
        </entry>
        <entry>
          <string>Bits</string>
          <int>4</int>
        </entry>
      </elementAttributes>
      <pos x="500" y="320"/>
    </visualElement>
    <visualElement>
      <elementName>Comparator</elementName>
      <elementAttributes>
        <entry>
          <string>Bits</string>
          <int>4</int>
        </entry>
      </elementAttributes>
      <pos x="400" y="400"/>
    </visualElement>
    <visualElement>
      <elementName>Const</elementName>
      <elementAttributes>
        <entry>
          <string>Value</string>
          <long>9</long>
        </entry>
        <entry>
          <string>Bits</string>
          <int>4</int>
        </entry>
      </elementAttributes>
      <pos x="380" y="420"/>
    </visualElement>
    <visualElement>
      <elementName>Out</elementName>
      <elementAttributes>
        <entry>
          <string>Label</string>
          <string>OUT</string>
        </entry>
        <entry>
          <string>Bits</string>
          <int>4</int>
        </entry>
      </elementAttributes>
      <pos x="880" y="300"/>
    </visualElement>
    <visualElement>
      <elementName>In</elementName>
      <elementAttributes>
        <entry>
          <string>Label</string>
          <string>RESET</string>
        </entry>
      </elementAttributes>
      <pos x="320" y="500"/>
    </visualElement>
    <visualElement>
      <elementName>Or</elementName>
      <elementAttributes>
        <entry>
          <string>rotation</string>
          <rotation rotation="1"/>
        </entry>
      </elementAttributes>
      <pos x="520" y="400"/>
    </visualElement>
    <visualElement>
      <elementName>D_FF</elementName>
      <elementAttributes>
        <entry>
          <string>Bits</string>
          <int>4</int>
        </entry>
        <entry>
          <string>Default</string>
          <long>11</long>
        </entry>
      </elementAttributes>
      <pos x="680" y="300"/>
    </visualElement>
    <visualElement>
      <elementName>Testcase</elementName>
      <elementAttributes>
        <entry>
          <string>Label</string>
          <string>Static</string>
        </entry>
        <entry>
          <string>Testdata</string>
          <testData>
            <dataString>CLK RESET OUT TC

C   1     0   0
loop(n,20)
let out = (n+1)%10;
C   0     (out) (out=9)
end loop
</dataString>
          </testData>
        </entry>
      </elementAttributes>
      <pos x="360" y="580"/>
    </visualElement>
    <visualElement>
      <elementName>Testcase</elementName>
      <elementAttributes>
        <entry>
          <string>Label</string>
          <string>Dynamic</string>
        </entry>
        <entry>
          <string>Testdata</string>
          <testData>
            <dataString>CLK RESET OUT TC

0   0     X   X
while(OUT !=0)
C   0     X   X
end while

0   0     0   0
repeat(20) C   0     ((OUT+1)%10) (OUT=8)
</dataString>
          </testData>
        </entry>
      </elementAttributes>
      <pos x="480" y="580"/>
    </visualElement>
    <visualElement>
      <elementName>Testcase</elementName>
      <elementAttributes>
        <entry>
          <string>Label</string>
          <string>Failing</string>
        </entry>
        <entry>
          <string>Testdata</string>
          <testData>
            <dataString>CLK RESET OUT TC

C   1     0   0
C   0     1   0
loop(n,4)
C   0     4   (n=1)
end loop
</dataString>
          </testData>
        </entry>
      </elementAttributes>
      <pos x="600" y="580"/>
    </visualElement>
    <visualElement>
      <elementName>Out</elementName>
      <elementAttributes>
        <entry>
          <string>Label</string>
          <string>TC</string>
        </entry>
      </elementAttributes>
      <pos x="880" y="420"/>
    </visualElement>
  </visualElements>
  <wires>
    <wire>
      <p1 x="600" y="320"/>
      <p2 x="680" y="320"/>
    </wire>
    <wire>
      <p1 x="500" y="320"/>
      <p2 x="520" y="320"/>
    </wire>
    <wire>
      <p1 x="340" y="240"/>
      <p2 x="400" y="240"/>
    </wire>
    <wire>
      <p1 x="460" y="240"/>
      <p2 x="500" y="240"/>
    </wire>
    <wire>
      <p1 x="340" y="400"/>
      <p2 x="400" y="400"/>
    </wire>
    <wire>
      <p1 x="380" y="260"/>
      <p2 x="400" y="260"/>
    </wire>
    <wire>
      <p1 x="340" y="180"/>
      <p2 x="780" y="180"/>
    </wire>
    <wire>
      <p1 x="380" y="420"/>
      <p2 x="400" y="420"/>
    </wire>
    <wire>
      <p1 x="460" y="420"/>
      <p2 x="520" y="420"/>
    </wire>
    <wire>
      <p1 x="520" y="420"/>
      <p2 x="880" y="420"/>
    </wire>
    <wire>
      <p1 x="320" y="500"/>
      <p2 x="560" y="500"/>
    </wire>
    <wire>
      <p1 x="380" y="280"/>
      <p2 x="400" y="280"/>
    </wire>
    <wire>
      <p1 x="500" y="280"/>
      <p2 x="520" y="280"/>
    </wire>
    <wire>
      <p1 x="740" y="300"/>
      <p2 x="780" y="300"/>
    </wire>
    <wire>
      <p1 x="560" y="300"/>
      <p2 x="680" y="300"/>
    </wire>
    <wire>
      <p1 x="780" y="300"/>
      <p2 x="880" y="300"/>
    </wire>
    <wire>
      <p1 x="320" y="540"/>
      <p2 x="600" y="540"/>
    </wire>
    <wire>
      <p1 x="560" y="400"/>
      <p2 x="560" y="500"/>
    </wire>
    <wire>
      <p1 x="340" y="180"/>
      <p2 x="340" y="240"/>
    </wire>
    <wire>
      <p1 x="340" y="240"/>
      <p2 x="340" y="400"/>
    </wire>
    <wire>
      <p1 x="500" y="240"/>
      <p2 x="500" y="280"/>
    </wire>
    <wire>
      <p1 x="600" y="320"/>
      <p2 x="600" y="540"/>
    </wire>
    <wire>
      <p1 x="520" y="400"/>
      <p2 x="520" y="420"/>
    </wire>
    <wire>
      <p1 x="780" y="180"/>
      <p2 x="780" y="300"/>
    </wire>
    <wire>
      <p1 x="540" y="320"/>
      <p2 x="540" y="340"/>
    </wire>
  </wires>
  <measurementOrdering/>
</circuit>