<snapdata remixID="9685591"><project name="Lab 3.4 unit tests" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAMMElEQVR4nO3cW0xU977AcV/60DfLQ7PjTrtNS9LEvuzEpuklbaZtNLSNVmv6IlWLSeslau2hVYbL+C8RGWTA0misw2ACqGBExDJWoTJrUGe4LQsDtFy06ClFk41ARap4Cd/z0MPaygDixuMfOb9P8k9w+V9rFv98M+Oa5cwMhNBohu4TEP+/SYBCKwlQaDVqgOfOnaO6upqKigpOnjw5pYfP5yMYDFJVVTXu8Bs+KioqqK2t5cKFC494mcVYwgJsa2ujoaGB1tbWx2KEfizixMezqFn5t3FH63/N4XLnRVpbW6mrq6Ojo0PHeosRwgL0+Xw0NjbS2NjIqlWr2LVrF2fPnrW2DY/U1FTa2trCtt89vvrqK9rb28ed09jYSEVFxajb9+3bd99tp7+z07/pGa5teoYB5+vcqjnAgGMOt2oOcO1/tw+PS+earP1qa2t1rLcYISzAoqIiTNPENE2++OILXnzxRex2O7t372bFihWsWLGC6OhoHA4HiYmJREdH88ILL5CcnExZWRk//fQT69at4/PPP2ft2rXU19cTExPD5s2befXVV8nMzCQyMpL8/HwiIyPZv38/GzZsYOXKlcTGxrJ27Vrsdjtnzpxh+fLlPPvssyQnJxMZGYnH42H16tXWfqZpUuO23xPZzR9S+fObd7l5MisswN9aGqzfraysTMd6ixHCAvz+++8JBoMEg0HcbjepqakUFBSQmZlJWloaHo+H7Oxs8vLy2LlzJ/v27ePo0aO43W7OnTtHMBhkx44dlJaW4vF4CAaDxMTEkJ+fT3p6Oh6Ph4KCAvbv309BQQFFRUVkZWXx3Xff4fF4SEtLIykpiWAwyPbt28nMzMTv91tzt27dysGDBykqKiIYDFLtjrMC+9P1NjfLXAx8/U9u5K8OC/BCs2n9bn6/X8d6ixHCAqyqqsLn8+H3+x/a2Lt374Tnbty4kZMnT054/tm8rWGhjTo2/4NzvzTh9/spLy+nvr5ex3qLEUa9CjYMA7fbTW5u7pQfhYWFVFZWcurUqXFHRUUFubm5eDweampqHvU6izHI+4BCKwlQaCUBCq3GDPDmzZtcvXp1Woxbt249yjUVD2DUAGtra6msrKSpqWlKjra2Nhp+Oou3+OC4o/JkGY2Njfj9fkKh0KNeWzEBYQHW19fT0tKi/RbbeCN4cBc1MX/j8sa/jzu6Y5/hX7//N62trTQ3N9PU1KRjjcU4wgIsKysjFAoRCoWYP38+DoeDwsJCfvjhB/Ly8sjJyWHv3r18+eWXZGdnEwqFrDej8/LyCIVCFBYWUl5ezuzZszl16hSzZ8/m22+/pb6+Hrvdzvr167Hb7aSnp1NRUUFOTg6HDh3C7/fz6aefsnv3bkKhEBkZGda2jIwM67yqRtz9+HP7m9xu8TGQ/M+w9/+62hv/vV9VlY41FuMIC/DQoUPU1dVRV1dHYmIizz//PHa7HbfbzcqVK0lISMBut7N161b27dvH4sWL2bt3L9u2bePXX3/FNE2SkpJITEzE4XDQ0NBAfHw8ycnJZGRksHHjRmvEx8cTFxeHw+EgKSmJuro61q9fT2pqKvn5+axZs4b8/Hzi4uKsn+vq6sJuv904sJ7BkiT+3LVolNtv9dbvI7ffpp6wAI8dO0YgECAQCHD48GHcbjder5f09HTy8vI4cuQIxcXFlJaW4nK58Hq9pKWlkZOTw/nz5wkEAiQnJ3PixAlKSkqs4zgcDrxeLwUFBdY4fPgwJSUlLFu2jKSkJAKBAC6Xy9o/JSUFwzBIS0tj+/btGIZBIBC45/bbtU3PcC3+eW4ed3Jt8z9Gvf02/PucOnVKxxqLcYQF2NzcjNfrxTCMRzaGX/YnOr/+qIdr9ufue/ttIN3Gz40NGIbBkSNHaGtr07HGYhyjXgU3NTVRUlLCN998MyXH8H9e2LNnz7hj9+7dZGVlUVpaSktLy6NeWzEB8ka00EoCFFpJgEIrCVBoJQEKrSRAoZUEKLSSAIVWEqDQSgIUWkmAQisJ8CEaHBzk+vXrU3ZMxY8mSIAPQW9vL6dPn8bn80350dDQwPXr13UvmUUCnKS+vj7OnDlDX1+f7lOZkK6uLgKBgO7TsEiAk1RbW0tPT4/u03ggLS0tU+br6STASfL5fLpP4YF1dHTw888/6z4NQAKctLsDrK2tZdasWcyaNQuXyzXqfMMwHsrjzpkzZ0LH9Xg8ZGRk3LOto6NjynxCUAKcpJHPgL29vSilWL16NQsWLKCnp4fo6Gi2bduGYRjYbDbS09PZtGmT9dJdWFhIQkICO3fuZNmyZSxbtgzDMIiMjMRms6GUYsmSJTz33HNER0djGAYREREUFhYSHx9PcXExS5cuxTCMsMeNiopCKXXPOUqA08hYAb700ksopaitrSU3N5f33nsPAKUUhmGwbt06cnNzrW0ApmnyySefcOHCBZRSzJ07F6UU+fn5REREMHPmTHp6elBKERERwZYtW6zjDR/j7sf97LPP2LFjhwQ4nY0M8Pr16xiGwYkTJ1BKcefOHZRSVgRKKSoqKlBKcenSJQAuXrxohfTjjz9a+7ndbgzDIBQK4XQ6mTlzJkopbty4gdPppLm52dpveBw/ftza//jx42RnZ4e9PEuA08ijvAhxOp0P5TgS4DTyuF4FS4DTxMgAL1++jGmalJeXA7BmzRo2bNjAwoULUUqxfPlyTNO05kdFRfHmm2/S3t6OzWazwjBNE6/Xa83ds2cPPT09mKZJQUEBAIFAANM0rStd0zQpLi629h/re7AlwGlktGdApRQzZ84kMTGRl19+mbi4OGJjY1FKER8fz9NPP23NvXTpEkuWLCEUCpGYmGiFMTz3rbfeorKykujoaJRSvPbaayxevBiAuXPnkpmZSVZWFkopbDYbsbGxAMTExBATEzPqOUuA08hoAS5dupSUlBRmzJhhxfHuu++ilCIrK4unnnrKmmuz2bDZbMBf0d0d4MKFC/noo49QSpGamopSCpfLhc1mo6amBqUUTzzxhPUYd1/sREVFERUVNeo5S4DTyGgB9vf3c+fOHbq7uxkYGKC/v5++vj76+/sZGBjg8uXL98zt7++3fr59+zbwV4ApKSnW3/X29tLd3U1/fz9Xrlyxtg0fc/g4w/MdDgfvv//+qOcsAU4j/1cXIcNhTWb/4RhHkgCnkckEePf7c6dPn77n9t3hw4fv+fvhnw3DmPTbMRLgNHK/AIf/fQaEvSE9b948a94rr7xCbGwsnZ2dADz55JNUV1ejlCI3NxfDMBgaGkIphdPpxDAMvv76awzDoLKy0npDeiIkwGnkfgHu2bPHujIdDtDlcuF0OklISLDmrVmzBqWU9R2GERER9PT0cODAASIiIlBKWQEO//n27dsopdiyZYt1/ImQAKeR+wUYHR3NokWL6OjosALs7u5m1apVvP7669a8jz/+2Loahr8CNAyDt99+mzfeeGPUAOGv6LxeL06n04r7fiTAacTn8zE0NKT1HMrLy/n99985duzYhOZ3dHRMmS/rlAAnqa2tjV9++UX3aTyQ6upqent7dZ8GIAFO2tDQEKZpEgqF+O2337h69SoAd+7cobOzc0qNixcvUlVVRXt7u+ZV+zcJ8CEYGhqis7MTn89HX18fV65cwe/309LSQltb25QZ58+fn3KfX5EAx5CdnU1OTs6Eny26urqsZ8Kampop8xI31UmAY+jr62Pp0qV88MEHvPPOO6Snp5Obmzvmxy/PnDmDz+ejvb1d+0XJ40QCHIdpmsyfP59FixZZY8GCBXz44Ye43W5KSkoYHBykq6tLnvX+QxLgOOrq6pg3b15YgEuWLMHtdnP06FEGBwd1n+ZjTQIcwx9//GG9BM+fPx+Xy0VeXt5j8w0IjwsJcAwPehEi/jMSoNBKAhRaSYBCKwlQaCUBCq0kQKGVBCi0kgCFVhKg0EoCFFpJgEIrCVBoJQEKrSRAoZUEKLSSAIVWEqDQSgIUWkmAQisJUGglAQqtJEChlQQotJIAhVYSoNBKAhRaSYBCKwlQaCUBCq0kQKGVBCi0kgCFVhKg0EoCFFpJgEIrCVBoJQEKrSRAoZUEKLSSAIVWEqDQSgIUWkmAQisJUGglAQqtJEChlQQotJIAhVYSoNBKAhRaSYBCKwlQaCUBCq0kQKGVBCi0kgCFVhKg0Op/AB27oJtm5UIHAAAAAElFTkSuQmCC</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAACtUlEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Bo3+AAF/RMkcAAAAAElFTkSuQmCC</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.923076923076906" y="30"><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="12.194444444445594" y="12.194444444444414" color="243,118,29"/><watcher var="Number of failing tests" style="normal" x="12.194444444445594" y="44.63166910555552" color="243,118,29"/><watcher var="tests" style="normal" x="12.194444444445594" y="255.22973197777787" color="243,118,29" hidden="true"/><watcher var="min tests" style="normal" x="12.194444444445594" y="400.95334552777757" color="243,118,29" hidden="true"/><watcher var="qux" style="normal" x="12.194444444445594" y="293.2763864499998" color="243,118,29" hidden="true"/><watcher var="between tests" style="normal" x="28.047222222222217" y="317.5433308944442" color="243,118,29" hidden="true"/><watcher var="max tests" style="normal" x="26.827777777777783" y="259.00999756111094" 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><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>WHEE!</l><l>h</l></custom-block><l>upper contains lower</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>All right, settle down.</l><l>S</l></custom-block><l>lower contains upper</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><script><block s="doIfElse"><block s="reportLessThan"><block var="a"/><block var="b"/></block><script><block s="doReport"><block var="a"/></block></script><script><block s="doIfElse"><block s="reportLessThan"><block var="b"/><block var="a"/></block><script><block s="doReport"><block var="b"/></block></script><script><block s="doReport"><block var="a"/></block></script></block></script></block></script></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><script><block s="doIfElse"><block s="reportLessThan"><block var="a"/><block var="b"/></block><script><block s="doReport"><block var="b"/></block></script><script><block s="doIfElse"><block s="reportLessThan"><block var="b"/><block var="a"/></block><script><block s="doReport"><block var="a"/></block></script><script><block s="doReport"><block var="a"/></block></script></block></script></block></script></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><script><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportEquals"><block var="a"/><block var="b"/></block><block s="reportEquals"><block var="a"/><block var="c"/></block></block><block s="reportOr"><block s="reportLessThan"><block var="b"/><block s="reportLessThan"><block var="a"/><block var="c"/></block></block><block s="reportLessThan"><block var="c"/><block s="reportLessThan"><block var="a"/><block var="b"/></block></block></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></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><script><block s="doIfElse"><block s="reportOr"><block s="reportGreaterThan"><block s="reportStringSize"><block var="text"/></block><block var="length"/></block><block s="reportEquals"><block s="reportStringSize"><block var="text"/></block><block var="length"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></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><script><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportSum"><block s="reportPower"><block s="reportDifference"><block s="yPosition"></block><block var="y"/></block><l>2</l></block><block s="reportPower"><block s="reportDifference"><block s="xPosition"></block><block var="x"/></block><l>2</l></block></block></block></block></script></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><script><block s="doFor"><l>i</l><l>1</l><block s="reportStringSize"><block var="text"/></block><script><block s="doIf"><block s="reportEquals"><block s="reportUnicode"><block s="reportLetter"><block var="i"/><block var="text"/></block></block><block s="reportUnicode"><block var="letter"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition></blocks><variables><variable name="Number of passing tests"><l>31</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="701"><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="702"><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="703"><item><bool>true</bool></item><item><bool>true</bool></item><item><bool>true</bool></item></list></variable><variable name="between tests"><list id="704"><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="705">bar,foo,0</list></variable></variables></project><media name="Lab 3.4 unit tests" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>