<snapdata remixID="9068379"><project name="Lab 3.4 unit tests" app="Snap! 5.1, http://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" volume="100" pan="0" lines="round" ternary="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="61.92307692307692" y="40"><block s="receiveGo"></block><block s="doSetVar"><l>Number of passing tests</l><l>0</l></block><block s="doSetVar"><l>Number of failing tests</l><l>0</l></block><custom-block s="test min block"></custom-block><custom-block s="test max block"></custom-block><custom-block s="test between block"></custom-block><custom-block s="test min letter count block"></custom-block><custom-block s="test distance to block"></custom-block><custom-block s="test contains letter block"></custom-block><block s="bubble"><block s="reportJoinWords"><list><l>Tests completed with </l><block var="Number of passing tests"/><l> passing and </l><block var="Number of failing tests"/><l> failing.</l></list></block></block></script></scripts></sprite><watcher var="Number of passing tests" style="normal" x="10" y="10" color="243,118,29"/><watcher var="Number of failing tests" style="normal" x="10" y="36.60000200000002" color="243,118,29"/><watcher var="tests" style="normal" x="10" y="209.300008" color="243,118,29" hidden="true"/><watcher var="min tests" style="normal" x="10" y="328.80001000000004" color="243,118,29" hidden="true"/><watcher var="qux" style="normal" x="10" y="240.499998" color="243,118,29" hidden="true"/><watcher var="between tests" style="normal" x="23" y="260.399998" color="243,118,29" hidden="true"/><watcher var="max tests" style="normal" x="22" y="212.39999799999998" color="243,118,29" hidden="true"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="expect equals %&apos;expected&apos; %&apos;actual&apos; %&apos;message&apos;" type="predicate" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="expected"/><block var="actual"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doAsk"><block s="reportJoinWords"><list><l>FAILURE:</l><block var="message"/><l>. Expected: </l><block var="expected"/><l> actual: </l><block var="actual"/><l>. Press enter to continue.</l></list></block></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="count %&apos;list&apos; matching %&apos;criterion&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doDeclareVariables"><list><l>item</l><l>num matching</l></list></block><block s="doSetVar"><l>num matching</l><l>0</l></block><block s="doUntil"><block s="reportEquals"><block s="reportListLength"><block var="list"/></block><l>0</l></block><script><block s="doIf"><block s="evaluate"><block var="criterion"/><list><block s="reportListItem"><l>1</l><block var="list"/></block></list></block><script><block s="doChangeVar"><l>num matching</l><l>1</l></block></script></block><block s="doSetVar"><l>list</l><block s="reportCDR"><block var="list"/></block></block></script></block><block s="doReport"><block var="num matching"/></block></script></block-definition><block-definition s="accumulate test results %&apos;test results&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doChangeVar"><l>Number of passing tests</l><custom-block s="count True in %l"><block var="test results"/></custom-block></block><block s="doChangeVar"><l>Number of failing tests</l><custom-block s="count False in %l"><block var="test results"/></custom-block></block></script></block-definition><block-definition s="count True in %&apos;list&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="count %l matching %predRing"><block var="list"/><block s="reifyPredicate"><autolambda><block s="reportEquals"><block var="#1"/><block s="reportBoolean"><l><bool>true</bool></l></block></block></autolambda><list><l>#1</l></list></block></custom-block></block></script></block-definition><block-definition s="count False in %&apos;list&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="count %l matching %predRing"><block var="list"/><block s="reifyPredicate"><autolambda><block s="reportEquals"><block var="#1"/><block s="reportBoolean"><l><bool>false</bool></l></block></block></autolambda><list><l>#1</l></list></block></custom-block></block></script></block-definition><block-definition s="test min block" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="accumulate test results %l"><block s="reportNewList"><list><custom-block s="expect equals %s %s %s"><l>7</l><custom-block s="min %n %n"><l>10</l><l>7</l></custom-block><l>min of two positives, left bigger</l></custom-block><custom-block s="expect equals %s %s %s"><l>7</l><custom-block s="min %n %n"><l>7</l><l>10</l></custom-block><l>min of two positives, right bigger</l></custom-block><custom-block s="expect equals %s %s %s"><l>-10</l><custom-block s="min %n %n"><l>-7</l><l>-10</l></custom-block><l>min of two negatives, left bigger</l></custom-block><custom-block s="expect equals %s %s %s"><l>-10</l><custom-block s="min %n %n"><l>-7</l><l>-10</l></custom-block><l>min of two negatives, right bigger</l></custom-block><custom-block s="expect equals %s %s %s"><l>-1</l><custom-block s="min %n %n"><l>6</l><l>-1</l></custom-block><l>min of left positive, right negative</l></custom-block><custom-block s="expect equals %s %s %s"><l>-1</l><custom-block s="min %n %n"><l>-1</l><l>6</l></custom-block><l>min of right positive, left negative</l></custom-block><custom-block s="expect equals %s %s %s"><l>4</l><custom-block s="min %n %n"><l>4</l><l>4</l></custom-block><l>min of equals</l></custom-block></list></block></custom-block></script></block-definition><block-definition s="test max block" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="accumulate test results %l"><block s="reportNewList"><list><custom-block s="expect equals %s %s %s"><custom-block s="max %n %n"><l>3</l><l>7</l></custom-block><l>7</l><l>max, left bigger</l></custom-block><custom-block s="expect equals %s %s %s"><custom-block s="max %n %n"><l>7</l><l>3</l></custom-block><l>7</l><l>max, right bigger</l></custom-block><custom-block s="expect equals %s %s %s"><custom-block s="max %n %n"><l>4</l><l>4</l></custom-block><l>4</l><l>max of equals</l></custom-block></list></block></custom-block></script></block-definition><block-definition s="test between block" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="accumulate test results %l"><block s="reportNewList"><list><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>true</bool></l></block><custom-block s="is %n between %n and %n ?"><l>5</l><l>0</l><l>10</l></custom-block><l>mid between low and high</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>true</bool></l></block><custom-block s="is %n between %n and %n ?"><l>5</l><l>10</l><l>0</l></custom-block><l>mid between high and low</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="is %n between %n and %n ?"><l>0</l><l>5</l><l>10</l></custom-block><l>low between mid and high</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="is %n between %n and %n ?"><l>0</l><l>10</l><l>5</l></custom-block><l>low between high and mid</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="is %n between %n and %n ?"><l>10</l><l>0</l><l>5</l></custom-block><l>high between low and mid</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="is %n between %n and %n ?"><l>10</l><l>5</l><l>0</l></custom-block><l>high between low and mid</l></custom-block></list></block></custom-block></script></block-definition><block-definition s="test min letter count block" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="accumulate test results %l"><block s="reportNewList"><list><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="is %txt at least %n letters long?"><l>brookline</l><l>20</l></custom-block><l>text too short</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>true</bool></l></block><custom-block s="is %txt at least %n letters long?"><l>high</l><l>4</l></custom-block><l>text equal length</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>true</bool></l></block><custom-block s="is %txt at least %n letters long?"><l>school</l><l>-1</l></custom-block><l>text longer</l></custom-block></list></block></custom-block></script></block-definition><block-definition s="test distance to block" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>tests</l></list></block><block s="doSetVar"><l>tests</l><block s="reportNewList"><list><l></l></list></block></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="doAddToList"><custom-block s="expect equals %s %s %s"><l>0</l><custom-block s="distance to x: %n y: %n"><l>0</l><l>0</l></custom-block><l>distance (on top of)</l></custom-block><block var="tests"/></block><block s="doAddToList"><custom-block s="expect equals %s %s %s"><l>50</l><custom-block s="distance to x: %n y: %n"><l>30</l><l>40</l></custom-block><l>distance (quadrant 1)</l></custom-block><block var="tests"/></block><block s="doAddToList"><custom-block s="expect equals %s %s %s"><l>130</l><custom-block s="distance to x: %n y: %n"><l>-50</l><l>120</l></custom-block><l>distance (quadrant 2)</l></custom-block><block var="tests"/></block><block s="doAddToList"><custom-block s="expect equals %s %s %s"><l>25</l><custom-block s="distance to x: %n y: %n"><l>-7</l><l>-24</l></custom-block><l>distance (quadrant 3)</l></custom-block><block var="tests"/></block><block s="doAddToList"><custom-block s="expect equals %s %s %s"><l>41</l><custom-block s="distance to x: %n y: %n"><l>40</l><l>-9</l></custom-block><l>distance (quadrant 4)</l></custom-block><block var="tests"/></block><block s="gotoXY"><l>30</l><l>40</l><comment w="174.6153846153846" collapsed="false">We already tested above distance to 30,40 when the sprite was at 0,0. Now we turn that around and have the sprite at 30,40 and compute the distance to 0,0.</comment></block><block s="doAddToList"><custom-block s="expect equals %s %s %s"><l>50</l><custom-block s="distance to x: %n y: %n"><l>0</l><l>0</l></custom-block><l>distance (symmetric)</l></custom-block><block var="tests"/></block><block s="gotoXY"><l>0</l><l>0</l></block><custom-block s="accumulate test results %l"><block var="tests"/></custom-block></script></block-definition><block-definition s="test contains letter block" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="accumulate test results %l"><block s="reportNewList"><list><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="%txt contains letter %s ?"><l>brookline</l><l>x</l></custom-block><l>letter missing</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>true</bool></l></block><custom-block s="%txt contains letter %s ?"><l>high</l><l>g</l></custom-block><l>letter present</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>false</bool></l></block><custom-block s="%txt contains letter %s ?"><l>school</l><l> </l></custom-block><l>space missing</l></custom-block><custom-block s="expect equals %s %s %s"><block s="reportBoolean"><l><bool>true</bool></l></block><custom-block s="%txt contains letter %s ?"><l>is awesome</l><l> </l></custom-block><l>space missing</l></custom-block></list></block></custom-block></script></block-definition><block-definition s="min %&apos;a&apos; %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs></block-definition><block-definition s="max %&apos;a&apos; %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs></block-definition><block-definition s="is %&apos;a&apos; between %&apos;b&apos; and %&apos;c&apos; ?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs></block-definition><block-definition s="is %&apos;text&apos; at least %&apos;length&apos; letters long?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%n"></input></inputs></block-definition><block-definition s="distance to x: %&apos;x&apos; y: %&apos;y&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs></block-definition><block-definition s="%&apos;text&apos; contains letter %&apos;letter&apos; ?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%s"></input></inputs></block-definition></blocks><variables><variable name="Number of passing tests"><l>0</l></variable><variable name="Number of failing tests"><l>0</l></variable><variable name="test results"><l>6</l></variable><variable name="tests"><list id="507"><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>true</bool></item><item><l></l></item><item><l></l></item><item><l></l></item></list></variable><variable name="min tests"><list id="508"><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>true</bool></item></list></variable><variable name="max tests"><list id="509"><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>true</bool></item></list></variable><variable name="between tests"><list id="510"><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>false</bool></item><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>true</bool></item></list></variable><variable name="qux"><list struct="atomic" id="511">bar,foo,0</list></variable></variables></project><media name="Lab 3.4 unit tests" app="Snap! 5.1, http://snap.berkeley.edu" version="1"></media></snapdata>