<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>scope_spec.sl - Coverage</title>
<link rel="stylesheet" href="../assets/style.css">
</head>
<body>
<div class="container">
<header>
<h1>scope_spec.sl</h1>
<a href="../index.html" class="back-link">← Back to Dashboard</a>
</header>
<section class="source-view">
<table>
<tbody>
<tr class="code-line">
<td class="line-num">1</td>
<td class="line-indicator"></td>
<td class="code-content"><pre>// ============================================================================</pre></td>
</tr><tr class="code-line">
<td class="line-num">2</td>
<td class="line-indicator"></td>
<td class="code-content"><pre>// Scope and Shadowing Test Suite</pre></td>
</tr><tr class="code-line">
<td class="line-num">3</td>
<td class="line-indicator"></td>
<td class="code-content"><pre>// ============================================================================</pre></td>
</tr><tr class="code-line">
<td class="line-num">4</td>
<td class="line-indicator"></td>
<td class="code-content"><pre></pre></td>
</tr><tr class="code-line">
<td class="line-num">5</td>
<td class="line-indicator"></td>
<td class="code-content"><pre>describe("Scope and Shadowing", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">6</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> test("inner scope shadows outer variable", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">7</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let x = 1;</pre></td>
</tr><tr class="code-line">
<td class="line-num">8</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> {</pre></td>
</tr><tr class="code-line">
<td class="line-num">9</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let x = 2;</pre></td>
</tr><tr class="code-line">
<td class="line-num">10</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(x, 2);</pre></td>
</tr><tr class="code-line">
<td class="line-num">11</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> }</pre></td>
</tr><tr class="code-line">
<td class="line-num">12</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(x, 1);</pre></td>
</tr><tr class="code-line">
<td class="line-num">13</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> });</pre></td>
</tr><tr class="code-line">
<td class="line-num">14</td>
<td class="line-indicator"></td>
<td class="code-content"><pre></pre></td>
</tr><tr class="code-line">
<td class="line-num">15</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> test("inner scope can access outer variable", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">16</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let outer = 10;</pre></td>
</tr><tr class="code-line">
<td class="line-num">17</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let result = 0;</pre></td>
</tr><tr class="code-line">
<td class="line-num">18</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> {</pre></td>
</tr><tr class="code-line">
<td class="line-num">19</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> result = outer + 5;</pre></td>
</tr><tr class="code-line">
<td class="line-num">20</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> }</pre></td>
</tr><tr class="code-line">
<td class="line-num">21</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(result, 15);</pre></td>
</tr><tr class="code-line">
<td class="line-num">22</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> });</pre></td>
</tr><tr class="code-line">
<td class="line-num">23</td>
<td class="line-indicator"></td>
<td class="code-content"><pre></pre></td>
</tr><tr class="code-line">
<td class="line-num">24</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> test("function has its own scope", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">25</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let x = 100;</pre></td>
</tr><tr class="code-line">
<td class="line-num">26</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> fn setX() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">27</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let x = 50;</pre></td>
</tr><tr class="code-line">
<td class="line-num">28</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> return x;</pre></td>
</tr><tr class="code-line">
<td class="line-num">29</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> }</pre></td>
</tr><tr class="code-line">
<td class="line-num">30</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(setX(), 50);</pre></td>
</tr><tr class="code-line">
<td class="line-num">31</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(x, 100);</pre></td>
</tr><tr class="code-line">
<td class="line-num">32</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> });</pre></td>
</tr><tr class="code-line">
<td class="line-num">33</td>
<td class="line-indicator"></td>
<td class="code-content"><pre></pre></td>
</tr><tr class="code-line">
<td class="line-num">34</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> test("for loop scope", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">35</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let sum = 0;</pre></td>
</tr><tr class="code-line">
<td class="line-num">36</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> for (i in range(1, 4)) {</pre></td>
</tr><tr class="code-line">
<td class="line-num">37</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> sum = sum + i;</pre></td>
</tr><tr class="code-line">
<td class="line-num">38</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> }</pre></td>
</tr><tr class="code-line">
<td class="line-num">39</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(sum, 6);</pre></td>
</tr><tr class="code-line">
<td class="line-num">40</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> });</pre></td>
</tr><tr class="code-line">
<td class="line-num">41</td>
<td class="line-indicator"></td>
<td class="code-content"><pre></pre></td>
</tr><tr class="code-line">
<td class="line-num">42</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> test("while loop scope", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">43</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let count = 0;</pre></td>
</tr><tr class="code-line">
<td class="line-num">44</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> while (count < 3) {</pre></td>
</tr><tr class="code-line">
<td class="line-num">45</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let temp = count;</pre></td>
</tr><tr class="code-line">
<td class="line-num">46</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> count = count + 1;</pre></td>
</tr><tr class="code-line">
<td class="line-num">47</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> }</pre></td>
</tr><tr class="code-line">
<td class="line-num">48</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> });</pre></td>
</tr><tr class="code-line">
<td class="line-num">49</td>
<td class="line-indicator"></td>
<td class="code-content"><pre></pre></td>
</tr><tr class="code-line">
<td class="line-num">50</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> test("if block scope", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">51</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let result = "";</pre></td>
</tr><tr class="code-line">
<td class="line-num">52</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> if (true) {</pre></td>
</tr><tr class="code-line">
<td class="line-num">53</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let message = "inside if";</pre></td>
</tr><tr class="code-line">
<td class="line-num">54</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> result = message;</pre></td>
</tr><tr class="code-line">
<td class="line-num">55</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> }</pre></td>
</tr><tr class="code-line">
<td class="line-num">56</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(result, "inside if");</pre></td>
</tr><tr class="code-line">
<td class="line-num">57</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> });</pre></td>
</tr><tr class="code-line">
<td class="line-num">58</td>
<td class="line-indicator"></td>
<td class="code-content"><pre></pre></td>
</tr><tr class="code-line">
<td class="line-num">59</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> test("try/catch scope", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">60</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let caught = false;</pre></td>
</tr><tr class="code-line">
<td class="line-num">61</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> try {</pre></td>
</tr><tr class="code-line">
<td class="line-num">62</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let x = 1;</pre></td>
</tr><tr class="code-line">
<td class="line-num">63</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> } catch (e) {</pre></td>
</tr><tr class="code-line">
<td class="line-num">64</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> caught = true;</pre></td>
</tr><tr class="code-line">
<td class="line-num">65</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> }</pre></td>
</tr><tr class="code-line">
<td class="line-num">66</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert(caught == false);</pre></td>
</tr><tr class="code-line">
<td class="line-num">67</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> });</pre></td>
</tr><tr class="code-line">
<td class="line-num">68</td>
<td class="line-indicator"></td>
<td class="code-content"><pre></pre></td>
</tr><tr class="code-line">
<td class="line-num">69</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> test("lambda captures outer scope", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">70</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let outer = 42;</pre></td>
</tr><tr class="code-line">
<td class="line-num">71</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let get_outer = fn() { return outer; };</pre></td>
</tr><tr class="code-line">
<td class="line-num">72</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(get_outer(), 42);</pre></td>
</tr><tr class="code-line">
<td class="line-num">73</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> });</pre></td>
</tr><tr class="code-line">
<td class="line-num">74</td>
<td class="line-indicator"></td>
<td class="code-content"><pre></pre></td>
</tr><tr class="code-line">
<td class="line-num">75</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> test("nested blocks", fn() {</pre></td>
</tr><tr class="code-line">
<td class="line-num">76</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let a = 1;</pre></td>
</tr><tr class="code-line">
<td class="line-num">77</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> {</pre></td>
</tr><tr class="code-line">
<td class="line-num">78</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let b = 2;</pre></td>
</tr><tr class="code-line">
<td class="line-num">79</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> {</pre></td>
</tr><tr class="code-line">
<td class="line-num">80</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> let c = 3;</pre></td>
</tr><tr class="code-line">
<td class="line-num">81</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(a, 1);</pre></td>
</tr><tr class="code-line">
<td class="line-num">82</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(b, 2);</pre></td>
</tr><tr class="code-line">
<td class="line-num">83</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(c, 3);</pre></td>
</tr><tr class="code-line">
<td class="line-num">84</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> }</pre></td>
</tr><tr class="code-line">
<td class="line-num">85</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(a, 1);</pre></td>
</tr><tr class="code-line">
<td class="line-num">86</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(b, 2);</pre></td>
</tr><tr class="code-line">
<td class="line-num">87</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> }</pre></td>
</tr><tr class="code-line">
<td class="line-num">88</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> assert_eq(a, 1);</pre></td>
</tr><tr class="code-line">
<td class="line-num">89</td>
<td class="line-indicator"></td>
<td class="code-content"><pre> });</pre></td>
</tr><tr class="code-line">
<td class="line-num">90</td>
<td class="line-indicator"></td>
<td class="code-content"><pre>});</pre></td>
</tr>
</tbody>
</table>
</section>
</div>
</body>
</html>