mirror of
https://github.com/Ukendio/jecs.git
synced 2025-04-24 17:10:03 +00:00
613 lines
No EOL
55 KiB
HTML
Vendored
613 lines
No EOL
55 KiB
HTML
Vendored
<html><head>
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css">
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
|
|
<style>
|
|
body { font-family: monospace; font-size: 16px; }
|
|
.zero-hits { background-color: #fcc; font-weight: bold; color: red; }
|
|
.nonzero-hits { color: green; font-weight: bold; }
|
|
.low-hits { background-color: #ffe6b3; }
|
|
.high-hits { background-color: #cfc; }
|
|
th, td { padding: 0px; font-size: 12px; }
|
|
table.table { font-size: 14px; border-collapse: collapse; }
|
|
table.table th, table.table td { padding: 1px; font-size: 12px; line-height: 1.2; }
|
|
table.table tr { height: auto; }
|
|
</style></head><body>
|
|
<h1 class="text-center">testkit.luau Coverage</h1>
|
|
<h2>Total Execution Hits: 615</h2>
|
|
<h2>Function Coverage Overview: 54.84%</h2>
|
|
<button class="btn btn-primary mb-2" type="button" data-bs-toggle="collapse" data-bs-target="#funcTable">Toggle Function Coverage</button>
|
|
<div class="collapse show" id="funcTable">
|
|
<h2>Function Coverage:</h2><table class="table table-bordered"><thead><tr><th>Function</th><th>Hits</th></tr></thead><tbody>
|
|
<tr><td style="padding: 1px; min-width: 22ch;"><main></td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">white_underline:11</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">white:15</td><td style="padding: 1px; color: green; font-weight: bold;">24</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">green:19</td><td style="padding: 1px; color: green; font-weight: bold;">77</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">red:23</td><td style="padding: 1px; color: green; font-weight: bold;">146</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">yellow:27</td><td style="padding: 1px; color: green; font-weight: bold;">76</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">red_highlight:31</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">green_highlight:35</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">gray:39</td><td style="padding: 1px; color: green; font-weight: bold;">84</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">orange:43</td><td style="padding: 1px; color: green; font-weight: bold;">73</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">convert_units:48</td><td style="padding: 1px; color: green; font-weight: bold;">6</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">output_test_result:131</td><td style="padding: 1px; color: green; font-weight: bold;">24</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">CASE:169</td><td style="padding: 1px; color: green; font-weight: bold;">64</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">CHECK_EXPECT_ERR:183</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">CHECK:201</td><td style="padding: 1px; color: green; font-weight: bold;">9</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">TEST:224</td><td style="padding: 1px; color: green; font-weight: bold;">24</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">FOCUS:237</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">FINISH:248</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;"><anonymous>:264</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">SKIP:314</td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">START:330</td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">BENCH:342</td><td style="padding: 1px; color: green; font-weight: bold;">3</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;"><anonymous>:354</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">round:372</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">print2:396</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">tos:401</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">shallow_eq:480</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">deep_eq:500</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">test:533</td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">benchmark:545</td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
|
|
<tr><td style="padding: 1px; min-width: 22ch;">disable_formatting:549</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
|
|
</tbody></table></div>
|
|
<h2>Source Code:</h2><table class="table table-bordered"><thead><tr><th>Line</th><th>Hits</th><th>Code</th></tr></thead><tbody>
|
|
<tr><td>1</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>2</td><td><span class='text-muted'>N/A</span></td><td>-- testkit.luau</td>></tr>
|
|
<tr><td>3</td><td><span class='text-muted'>N/A</span></td><td>-- v0.7.3</td>></tr>
|
|
<tr><td>4</td><td><span class='text-muted'>N/A</span></td><td>-- MIT License</td>></tr>
|
|
<tr><td>5</td><td><span class='text-muted'>N/A</span></td><td>-- Copyright (c) 2022 centau</td>></tr>
|
|
<tr><td>6</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>7</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>8</td><td>1</td><td><span class=low-hits>local disable_ansi = false</span></td></tr>
|
|
<tr><td>9</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>10</td><td>1</td><td><span class=low-hits>local color = {</span></td></tr>
|
|
<tr><td>11</td><td>1</td><td><span class=low-hits>white_underline = function(s: string): string</span></td></tr>
|
|
<tr><td>12</td><td>0</td><td><span class=zero-hits>return if disable_ansi then s else `\27[1;4m{s}\27[0m`</span></td></tr>
|
|
<tr><td>13</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>14</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>15</td><td>1</td><td><span class=low-hits>white = function(s: string): string</span></td></tr>
|
|
<tr><td>16</td><td>24</td><td><span class=low-hits>return if disable_ansi then s else `\27[37;1m{s}\27[0m`</span></td></tr>
|
|
<tr><td>17</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>18</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>19</td><td>1</td><td><span class=low-hits>green = function(s: string): string</span></td></tr>
|
|
<tr><td>20</td><td>77</td><td><span class=high-hits>return if disable_ansi then s else `\27[32;1m{s}\27[0m`</span></td></tr>
|
|
<tr><td>21</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>22</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>23</td><td>1</td><td><span class=low-hits>red = function(s: string): string</span></td></tr>
|
|
<tr><td>24</td><td>146</td><td><span class=high-hits>return if disable_ansi then s else `\27[31;1m{s}\27[0m`</span></td></tr>
|
|
<tr><td>25</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>26</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>27</td><td>1</td><td><span class=low-hits>yellow = function(s: string): string</span></td></tr>
|
|
<tr><td>28</td><td>76</td><td><span class=high-hits>return if disable_ansi then s else `\27[33;1m{s}\27[0m`</span></td></tr>
|
|
<tr><td>29</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>30</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>31</td><td>1</td><td><span class=low-hits>red_highlight = function(s: string): string</span></td></tr>
|
|
<tr><td>32</td><td>0</td><td><span class=zero-hits>return if disable_ansi then s else `\27[41;1;30m{s}\27[0m`</span></td></tr>
|
|
<tr><td>33</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>34</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>35</td><td>1</td><td><span class=low-hits>green_highlight = function(s: string): string</span></td></tr>
|
|
<tr><td>36</td><td>0</td><td><span class=zero-hits>return if disable_ansi then s else `\27[42;1;30m{s}\27[0m`</span></td></tr>
|
|
<tr><td>37</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>38</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>39</td><td>1</td><td><span class=low-hits>gray = function(s: string): string</span></td></tr>
|
|
<tr><td>40</td><td>84</td><td><span class=high-hits>return if disable_ansi then s else `\27[38;1m{s}\27[0m`</span></td></tr>
|
|
<tr><td>41</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>42</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>43</td><td>1</td><td><span class=low-hits>orange = function(s: string): string</span></td></tr>
|
|
<tr><td>44</td><td>73</td><td><span class=high-hits>return if disable_ansi then s else `\27[38;5;208m{s}\27[0m`</span></td></tr>
|
|
<tr><td>45</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>46</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
<tr><td>47</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>48</td><td>1</td><td><span class=low-hits>local function convert_units(unit: string, value: number): (number, string)</span></td></tr>
|
|
<tr><td>49</td><td>6</td><td><span class=low-hits>local sign = math.sign(value)</span></td></tr>
|
|
<tr><td>50</td><td>6</td><td><span class=low-hits>value = math.abs(value)</span></td></tr>
|
|
<tr><td>51</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>52</td><td>6</td><td><span class=low-hits>local prefix_colors = {</span></td></tr>
|
|
<tr><td>53</td><td>6</td><td><span class=low-hits>[4] = color.red,</span></td></tr>
|
|
<tr><td>54</td><td>6</td><td><span class=low-hits>[3] = color.red,</span></td></tr>
|
|
<tr><td>55</td><td>6</td><td><span class=low-hits>[2] = color.yellow,</span></td></tr>
|
|
<tr><td>56</td><td>6</td><td><span class=low-hits>[1] = color.yellow,</span></td></tr>
|
|
<tr><td>57</td><td>6</td><td><span class=low-hits>[0] = color.green,</span></td></tr>
|
|
<tr><td>58</td><td>6</td><td><span class=low-hits>[-1] = color.red,</span></td></tr>
|
|
<tr><td>59</td><td>6</td><td><span class=low-hits>[-2] = color.yellow,</span></td></tr>
|
|
<tr><td>60</td><td>6</td><td><span class=low-hits>[-3] = color.green,</span></td></tr>
|
|
<tr><td>61</td><td>6</td><td><span class=low-hits>[-4] = color.red,</span></td></tr>
|
|
<tr><td>62</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
<tr><td>63</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>64</td><td>6</td><td><span class=low-hits>local prefixes = {</span></td></tr>
|
|
<tr><td>65</td><td>6</td><td><span class=low-hits>[4] = "T",</span></td></tr>
|
|
<tr><td>66</td><td>6</td><td><span class=low-hits>[3] = "G",</span></td></tr>
|
|
<tr><td>67</td><td>6</td><td><span class=low-hits>[2] = "M",</span></td></tr>
|
|
<tr><td>68</td><td>6</td><td><span class=low-hits>[1] = "k",</span></td></tr>
|
|
<tr><td>69</td><td>6</td><td><span class=low-hits>[0] = " ",</span></td></tr>
|
|
<tr><td>70</td><td>6</td><td><span class=low-hits>[-1] = "m",</span></td></tr>
|
|
<tr><td>71</td><td>6</td><td><span class=low-hits>[-2] = "u",</span></td></tr>
|
|
<tr><td>72</td><td>6</td><td><span class=low-hits>[-3] = "n",</span></td></tr>
|
|
<tr><td>73</td><td>6</td><td><span class=low-hits>[-4] = "p",</span></td></tr>
|
|
<tr><td>74</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
<tr><td>75</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>76</td><td>6</td><td><span class=low-hits>local order = 0</span></td></tr>
|
|
<tr><td>77</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>78</td><td>7</td><td><span class=low-hits>while value >= 1000 do</span></td></tr>
|
|
<tr><td>79</td><td>1</td><td><span class=low-hits>order += 1</span></td></tr>
|
|
<tr><td>80</td><td>1</td><td><span class=low-hits>value /= 1000</span></td></tr>
|
|
<tr><td>81</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>82</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>83</td><td>11</td><td><span class=low-hits>while value ~= 0 and value < 1 do</span></td></tr>
|
|
<tr><td>84</td><td>7</td><td><span class=low-hits>order -= 1</span></td></tr>
|
|
<tr><td>85</td><td>7</td><td><span class=low-hits>value *= 1000</span></td></tr>
|
|
<tr><td>86</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>87</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>88</td><td>6</td><td><span class=low-hits>if value >= 100 then</span></td></tr>
|
|
<tr><td>89</td><td>1</td><td><span class=low-hits>value = math.floor(value)</span></td></tr>
|
|
<tr><td>90</td><td>5</td><td><span class=low-hits>elseif value >= 10 then</span></td></tr>
|
|
<tr><td>91</td><td>1</td><td><span class=low-hits>value = math.floor(value * 1e1) / 1e1</span></td></tr>
|
|
<tr><td>92</td><td>4</td><td><span class=low-hits>elseif value >= 1 then</span></td></tr>
|
|
<tr><td>93</td><td>2</td><td><span class=low-hits>value = math.floor(value * 1e2) / 1e2</span></td></tr>
|
|
<tr><td>94</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>95</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>96</td><td>6</td><td><span class=low-hits>return value * sign, prefix_colors[order](prefixes[order] .. unit)</span></td></tr>
|
|
<tr><td>97</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>98</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>99</td><td>1</td><td><span class=low-hits>local WALL = color.gray("│")</span></td></tr>
|
|
<tr><td>100</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>101</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>102</td><td><span class='text-muted'>N/A</span></td><td>-- Testing</td>></tr>
|
|
<tr><td>103</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>104</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>105</td><td>0</td><td><span class=zero-hits>type Test = {</span></td></tr>
|
|
<tr><td>106</td><td>0</td><td><span class=zero-hits>name: string,</span></td></tr>
|
|
<tr><td>107</td><td>0</td><td><span class=zero-hits>case: Case?,</span></td></tr>
|
|
<tr><td>108</td><td>0</td><td><span class=zero-hits>cases: { Case },</span></td></tr>
|
|
<tr><td>109</td><td>0</td><td><span class=zero-hits>duration: number,</span></td></tr>
|
|
<tr><td>110</td><td>0</td><td><span class=zero-hits>error: {</span></td></tr>
|
|
<tr><td>111</td><td>0</td><td><span class=zero-hits>message: string,</span></td></tr>
|
|
<tr><td>112</td><td>0</td><td><span class=zero-hits>trace: string,</span></td></tr>
|
|
<tr><td>113</td><td>0</td><td><span class=zero-hits>}?,</span></td></tr>
|
|
<tr><td>114</td><td>0</td><td><span class=zero-hits>focus: boolean,</span></td></tr>
|
|
<tr><td>115</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
<tr><td>116</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>117</td><td>0</td><td><span class=zero-hits>type Case = {</span></td></tr>
|
|
<tr><td>118</td><td>0</td><td><span class=zero-hits>name: string,</span></td></tr>
|
|
<tr><td>119</td><td>0</td><td><span class=zero-hits>result: number,</span></td></tr>
|
|
<tr><td>120</td><td>0</td><td><span class=zero-hits>line: number?,</span></td></tr>
|
|
<tr><td>121</td><td>0</td><td><span class=zero-hits>focus: boolean,</span></td></tr>
|
|
<tr><td>122</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
<tr><td>123</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>124</td><td>1</td><td><span class=low-hits>local PASS, FAIL, NONE, ERROR, SKIPPED = 1, 2, 3, 4, 5</span></td></tr>
|
|
<tr><td>125</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>126</td><td>1</td><td><span class=low-hits>local check_for_focused = false</span></td></tr>
|
|
<tr><td>127</td><td>1</td><td><span class=low-hits>local skip = false</span></td></tr>
|
|
<tr><td>128</td><td>1</td><td><span class=low-hits>local test: Test?</span></td></tr>
|
|
<tr><td>129</td><td>1</td><td><span class=low-hits>local tests: { Test } = {}</span></td></tr>
|
|
<tr><td>130</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>131</td><td>1</td><td><span class=low-hits>local function output_test_result(test: Test)</span></td></tr>
|
|
<tr><td>132</td><td>24</td><td><span class=low-hits>if check_for_focused then</span></td></tr>
|
|
<tr><td>133</td><td>0</td><td><span class=zero-hits>local any_focused = test.focus</span></td></tr>
|
|
<tr><td>134</td><td>0</td><td><span class=zero-hits>for _, case in test.cases do</span></td></tr>
|
|
<tr><td>135</td><td>0</td><td><span class=zero-hits>any_focused = any_focused or case.focus</span></td></tr>
|
|
<tr><td>136</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>137</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>138</td><td>0</td><td><span class=zero-hits>if not any_focused then</span></td></tr>
|
|
<tr><td>139</td><td>0</td><td><span class=zero-hits>return</span></td></tr>
|
|
<tr><td>140</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>141</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>142</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>143</td><td>24</td><td><span class=low-hits>print(color.white(test.name))</span></td></tr>
|
|
<tr><td>144</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>145</td><td>24</td><td><span class=low-hits>for _, case in test.cases do</span></td></tr>
|
|
<tr><td>146</td><td>73</td><td><span class=high-hits>local status = ({</span></td></tr>
|
|
<tr><td>147</td><td>73</td><td><span class=high-hits>[PASS] = color.green("PASS"),</span></td></tr>
|
|
<tr><td>148</td><td>73</td><td><span class=high-hits>[FAIL] = color.red("FAIL"),</span></td></tr>
|
|
<tr><td>149</td><td>73</td><td><span class=high-hits>[NONE] = color.orange("NONE"),</span></td></tr>
|
|
<tr><td>150</td><td>73</td><td><span class=high-hits>[ERROR] = color.red("FAIL"),</span></td></tr>
|
|
<tr><td>151</td><td>73</td><td><span class=high-hits>[SKIPPED] = color.yellow("SKIP"),</span></td></tr>
|
|
<tr><td>152</td><td>73</td><td><span class=high-hits>})[case.result]</span></td></tr>
|
|
<tr><td>153</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>154</td><td>73</td><td><span class=high-hits>local line = case.result == FAIL and color.red(`{case.line}:`) or ""</span></td></tr>
|
|
<tr><td>155</td><td>73</td><td><span class=high-hits>if check_for_focused and case.focus == false and test.focus == false then</span></td></tr>
|
|
<tr><td>156</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
|
|
<tr><td>157</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>158</td><td>73</td><td><span class=high-hits>print(`{status}{WALL} {line}{color.gray(case.name)}`)</span></td></tr>
|
|
<tr><td>159</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>160</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>161</td><td>24</td><td><span class=low-hits>if test.error then</span></td></tr>
|
|
<tr><td>162</td><td>0</td><td><span class=zero-hits>print(color.gray("error: ") .. color.red(test.error.message))</span></td></tr>
|
|
<tr><td>163</td><td>0</td><td><span class=zero-hits>print(color.gray("trace: ") .. color.red(test.error.trace))</span></td></tr>
|
|
<tr><td>164</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
|
|
<tr><td>165</td><td>24</td><td><span class=low-hits>print()</span></td></tr>
|
|
<tr><td>166</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>167</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>168</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>169</td><td>1</td><td><span class=low-hits>local function CASE(name: string)</span></td></tr>
|
|
<tr><td>170</td><td>0</td><td><span class=zero-hits>skip = false</span></td></tr>
|
|
<tr><td>171</td><td>0</td><td><span class=zero-hits>assert(test, "no active test")</span></td></tr>
|
|
<tr><td>172</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>173</td><td>0</td><td><span class=zero-hits>local case = {</span></td></tr>
|
|
<tr><td>174</td><td>0</td><td><span class=zero-hits>name = name,</span></td></tr>
|
|
<tr><td>175</td><td>0</td><td><span class=zero-hits>result = NONE,</span></td></tr>
|
|
<tr><td>176</td><td>0</td><td><span class=zero-hits>focus = false,</span></td></tr>
|
|
<tr><td>177</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
<tr><td>178</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>179</td><td>0</td><td><span class=zero-hits>test.case = case</span></td></tr>
|
|
<tr><td>180</td><td>0</td><td><span class=zero-hits>table.insert(test.cases, case)</span></td></tr>
|
|
<tr><td>181</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>182</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>183</td><td>1</td><td><span class=low-hits>local function CHECK_EXPECT_ERR(fn, ...)</span></td></tr>
|
|
<tr><td>184</td><td>9</td><td><span class=low-hits>assert(test, "no active test")</span></td></tr>
|
|
<tr><td>185</td><td>9</td><td><span class=low-hits>local case = test.case</span></td></tr>
|
|
<tr><td>186</td><td>9</td><td><span class=low-hits>if not case then</span></td></tr>
|
|
<tr><td>187</td><td>0</td><td><span class=zero-hits>CASE("")</span></td></tr>
|
|
<tr><td>188</td><td>0</td><td><span class=zero-hits>case = test.case</span></td></tr>
|
|
<tr><td>189</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>190</td><td>9</td><td><span class=low-hits>assert(case, "no active case")</span></td></tr>
|
|
<tr><td>191</td><td>9</td><td><span class=low-hits>if case.result ~= FAIL then</span></td></tr>
|
|
<tr><td>192</td><td>9</td><td><span class=low-hits>local ok, err = pcall(fn, ...)</span></td></tr>
|
|
<tr><td>193</td><td>9</td><td><span class=low-hits>case.result = if ok then FAIL else PASS</span></td></tr>
|
|
<tr><td>194</td><td>9</td><td><span class=low-hits>if skip then</span></td></tr>
|
|
<tr><td>195</td><td>0</td><td><span class=zero-hits>case.result = SKIPPED</span></td></tr>
|
|
<tr><td>196</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>197</td><td>9</td><td><span class=low-hits>case.line = debug.info(stack and stack + 1 or 2, "l")</span></td></tr>
|
|
<tr><td>198</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>199</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>200</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>201</td><td>1</td><td><span class=low-hits>local function CHECK<T>(value: T, stack: number?): T?</span></td></tr>
|
|
<tr><td>202</td><td>1195</td><td><span class=high-hits>assert(test, "no active test")</span></td></tr>
|
|
<tr><td>203</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>204</td><td>1195</td><td><span class=high-hits>local case = test.case</span></td></tr>
|
|
<tr><td>205</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>206</td><td>1195</td><td><span class=high-hits>if not case then</span></td></tr>
|
|
<tr><td>207</td><td>9</td><td><span class=low-hits>CASE("")</span></td></tr>
|
|
<tr><td>208</td><td>9</td><td><span class=low-hits>case = test.case</span></td></tr>
|
|
<tr><td>209</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>210</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>211</td><td>1195</td><td><span class=high-hits>assert(case, "no active case")</span></td></tr>
|
|
<tr><td>212</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>213</td><td>1195</td><td><span class=high-hits>if case.result ~= FAIL then</span></td></tr>
|
|
<tr><td>214</td><td>1195</td><td><span class=high-hits>case.result = value and PASS or FAIL</span></td></tr>
|
|
<tr><td>215</td><td>1195</td><td><span class=high-hits>if skip then</span></td></tr>
|
|
<tr><td>216</td><td>1</td><td><span class=low-hits>case.result = SKIPPED</span></td></tr>
|
|
<tr><td>217</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>218</td><td>1195</td><td><span class=high-hits>case.line = debug.info(stack and stack + 1 or 2, "l")</span></td></tr>
|
|
<tr><td>219</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>220</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>221</td><td>1195</td><td><span class=high-hits>return value</span></td></tr>
|
|
<tr><td>222</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>223</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>224</td><td>1</td><td><span class=low-hits>local function TEST(name: string, fn: () -> ())</span></td></tr>
|
|
<tr><td>225</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>226</td><td>24</td><td><span class=low-hits>test = {</span></td></tr>
|
|
<tr><td>227</td><td>24</td><td><span class=low-hits>name = name,</span></td></tr>
|
|
<tr><td>228</td><td>24</td><td><span class=low-hits>cases = {},</span></td></tr>
|
|
<tr><td>229</td><td>24</td><td><span class=low-hits>duration = 0,</span></td></tr>
|
|
<tr><td>230</td><td>24</td><td><span class=low-hits>focus = false,</span></td></tr>
|
|
<tr><td>231</td><td>24</td><td><span class=low-hits>fn = fn</span></td></tr>
|
|
<tr><td>232</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
<tr><td>233</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>234</td><td>24</td><td><span class=low-hits>table.insert(tests, test)</span></td></tr>
|
|
<tr><td>235</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>236</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>237</td><td>1</td><td><span class=low-hits>local function FOCUS()</span></td></tr>
|
|
<tr><td>238</td><td>0</td><td><span class=zero-hits>assert(test, "no active test")</span></td></tr>
|
|
<tr><td>239</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>240</td><td>0</td><td><span class=zero-hits>check_for_focused = true</span></td></tr>
|
|
<tr><td>241</td><td>0</td><td><span class=zero-hits>if test.case then</span></td></tr>
|
|
<tr><td>242</td><td>0</td><td><span class=zero-hits>test.case.focus = true</span></td></tr>
|
|
<tr><td>243</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
|
|
<tr><td>244</td><td>0</td><td><span class=zero-hits>test.focus = true</span></td></tr>
|
|
<tr><td>245</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>246</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>247</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>248</td><td>1</td><td><span class=low-hits>local function FINISH(): boolean</span></td></tr>
|
|
<tr><td>249</td><td>1</td><td><span class=low-hits>local success = true</span></td></tr>
|
|
<tr><td>250</td><td>1</td><td><span class=low-hits>local total_cases = 0</span></td></tr>
|
|
<tr><td>251</td><td>1</td><td><span class=low-hits>local passed_cases = 0</span></td></tr>
|
|
<tr><td>252</td><td>1</td><td><span class=low-hits>local passed_focus_cases = 0</span></td></tr>
|
|
<tr><td>253</td><td>1</td><td><span class=low-hits>local total_focus_cases = 0</span></td></tr>
|
|
<tr><td>254</td><td>1</td><td><span class=low-hits>local duration = 0</span></td></tr>
|
|
<tr><td>255</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>256</td><td>1</td><td><span class=low-hits>for _, t in tests do</span></td></tr>
|
|
<tr><td>257</td><td>24</td><td><span class=low-hits>if check_for_focused and not t.focus then</span></td></tr>
|
|
<tr><td>258</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
|
|
<tr><td>259</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>260</td><td>24</td><td><span class=low-hits>test = t</span></td></tr>
|
|
<tr><td>261</td><td>24</td><td><span class=low-hits>fn = t.fn</span></td></tr>
|
|
<tr><td>262</td><td>24</td><td><span class=low-hits>local start = os.clock()</span></td></tr>
|
|
<tr><td>263</td><td>24</td><td><span class=low-hits>local err</span></td></tr>
|
|
<tr><td>264</td><td>24</td><td><span class=low-hits>local success = xpcall(fn, function(m: string)</span></td></tr>
|
|
<tr><td>265</td><td>0</td><td><span class=zero-hits>err = { message = m, trace = debug.traceback(nil, 2) }</span></td></tr>
|
|
<tr><td>266</td><td><span class='text-muted'>N/A</span></td><td>end)</td>></tr>
|
|
<tr><td>267</td><td>24</td><td><span class=low-hits>test.duration = os.clock() - start</span></td></tr>
|
|
<tr><td>268</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>269</td><td>24</td><td><span class=low-hits>if not test.case then</span></td></tr>
|
|
<tr><td>270</td><td>0</td><td><span class=zero-hits>CASE("")</span></td></tr>
|
|
<tr><td>271</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>272</td><td>24</td><td><span class=low-hits>assert(test.case, "no active case")</span></td></tr>
|
|
<tr><td>273</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>274</td><td>24</td><td><span class=low-hits>if not success then</span></td></tr>
|
|
<tr><td>275</td><td>0</td><td><span class=zero-hits>test.case.result = ERROR</span></td></tr>
|
|
<tr><td>276</td><td>0</td><td><span class=zero-hits>test.error = err</span></td></tr>
|
|
<tr><td>277</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>278</td><td>24</td><td><span class=low-hits>collectgarbage()</span></td></tr>
|
|
<tr><td>279</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>280</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>281</td><td>1</td><td><span class=low-hits>for _, test in tests do</span></td></tr>
|
|
<tr><td>282</td><td>24</td><td><span class=low-hits>duration += test.duration</span></td></tr>
|
|
<tr><td>283</td><td>24</td><td><span class=low-hits>for _, case in test.cases do</span></td></tr>
|
|
<tr><td>284</td><td>73</td><td><span class=high-hits>total_cases += 1</span></td></tr>
|
|
<tr><td>285</td><td>73</td><td><span class=high-hits>if case.focus or test.focus then</span></td></tr>
|
|
<tr><td>286</td><td>0</td><td><span class=zero-hits>total_focus_cases += 1</span></td></tr>
|
|
<tr><td>287</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>288</td><td>73</td><td><span class=high-hits>if case.result == PASS or case.result == NONE or case.result == SKIPPED then</span></td></tr>
|
|
<tr><td>289</td><td>73</td><td><span class=high-hits>if case.focus or test.focus then</span></td></tr>
|
|
<tr><td>290</td><td>0</td><td><span class=zero-hits>passed_focus_cases += 1</span></td></tr>
|
|
<tr><td>291</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>292</td><td>73</td><td><span class=high-hits>passed_cases += 1</span></td></tr>
|
|
<tr><td>293</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
|
|
<tr><td>294</td><td>0</td><td><span class=zero-hits>success = false</span></td></tr>
|
|
<tr><td>295</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>296</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>297</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>298</td><td>24</td><td><span class=low-hits>output_test_result(test)</span></td></tr>
|
|
<tr><td>299</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>300</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>301</td><td>1</td><td><span class=low-hits>print(color.gray(string.format(`{passed_cases}/{total_cases} test cases passed in %.3f ms.`, duration * 1e3)))</span></td></tr>
|
|
<tr><td>302</td><td>1</td><td><span class=low-hits>if check_for_focused then</span></td></tr>
|
|
<tr><td>303</td><td>0</td><td><span class=zero-hits>print(color.gray(`{passed_focus_cases}/{total_focus_cases} focused test cases passed`))</span></td></tr>
|
|
<tr><td>304</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>305</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>306</td><td>1</td><td><span class=low-hits>local fails = total_cases - passed_cases</span></td></tr>
|
|
<tr><td>307</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>308</td><td>1</td><td><span class=low-hits>print((fails > 0 and color.red or color.green)(`{fails} {fails == 1 and "fail" or "fails"}`))</span></td></tr>
|
|
<tr><td>309</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>310</td><td>1</td><td><span class=low-hits>check_for_focused = false</span></td></tr>
|
|
<tr><td>311</td><td>1</td><td><span class=low-hits>return success, table.clear(tests)</span></td></tr>
|
|
<tr><td>312</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>313</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>314</td><td>1</td><td><span class=low-hits>local function SKIP()</span></td></tr>
|
|
<tr><td>315</td><td>1</td><td><span class=low-hits>skip = true</span></td></tr>
|
|
<tr><td>316</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>317</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>318</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>319</td><td><span class='text-muted'>N/A</span></td><td>-- Benchmarking</td>></tr>
|
|
<tr><td>320</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>321</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>322</td><td>0</td><td><span class=zero-hits>type Bench = {</span></td></tr>
|
|
<tr><td>323</td><td>0</td><td><span class=zero-hits>time_start: number?,</span></td></tr>
|
|
<tr><td>324</td><td>0</td><td><span class=zero-hits>memory_start: number?,</span></td></tr>
|
|
<tr><td>325</td><td>0</td><td><span class=zero-hits>iterations: number?,</span></td></tr>
|
|
<tr><td>326</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
<tr><td>327</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>328</td><td>1</td><td><span class=low-hits>local bench: Bench?</span></td></tr>
|
|
<tr><td>329</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>330</td><td>1</td><td><span class=low-hits>function START(iter: number?): number</span></td></tr>
|
|
<tr><td>331</td><td>1</td><td><span class=low-hits>local n = iter or 1</span></td></tr>
|
|
<tr><td>332</td><td>1</td><td><span class=low-hits>assert(n > 0, "iterations must be greater than 0")</span></td></tr>
|
|
<tr><td>333</td><td>1</td><td><span class=low-hits>assert(bench, "no active benchmark")</span></td></tr>
|
|
<tr><td>334</td><td>1</td><td><span class=low-hits>assert(not bench.time_start, "clock was already started")</span></td></tr>
|
|
<tr><td>335</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>336</td><td>1</td><td><span class=low-hits>bench.iterations = n</span></td></tr>
|
|
<tr><td>337</td><td>1</td><td><span class=low-hits>bench.memory_start = gcinfo()</span></td></tr>
|
|
<tr><td>338</td><td>1</td><td><span class=low-hits>bench.time_start = os.clock()</span></td></tr>
|
|
<tr><td>339</td><td>1</td><td><span class=low-hits>return n</span></td></tr>
|
|
<tr><td>340</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>341</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>342</td><td>1</td><td><span class=low-hits>local function BENCH(name: string, fn: () -> ())</span></td></tr>
|
|
<tr><td>343</td><td>3</td><td><span class=low-hits>local active = bench</span></td></tr>
|
|
<tr><td>344</td><td>3</td><td><span class=low-hits>assert(not active, "a benchmark is already in progress")</span></td></tr>
|
|
<tr><td>345</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>346</td><td>3</td><td><span class=low-hits>bench = {}</span></td></tr>
|
|
<tr><td>347</td><td>3</td><td><span class=low-hits>assert(bench);</span></td></tr>
|
|
<tr><td>348</td><td>3</td><td><span class=low-hits>(collectgarbage :: any)("collect")</span></td></tr>
|
|
<tr><td>349</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>350</td><td>3</td><td><span class=low-hits>local mem_start = gcinfo()</span></td></tr>
|
|
<tr><td>351</td><td>3</td><td><span class=low-hits>local time_start = os.clock()</span></td></tr>
|
|
<tr><td>352</td><td>3</td><td><span class=low-hits>local err_msg: string?</span></td></tr>
|
|
<tr><td>353</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>354</td><td>3</td><td><span class=low-hits>local success = xpcall(fn, function(m: string)</span></td></tr>
|
|
<tr><td>355</td><td>0</td><td><span class=zero-hits>err_msg = m .. debug.traceback(nil, 2)</span></td></tr>
|
|
<tr><td>356</td><td><span class='text-muted'>N/A</span></td><td>end)</td>></tr>
|
|
<tr><td>357</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>358</td><td>3</td><td><span class=low-hits>local time_stop = os.clock()</span></td></tr>
|
|
<tr><td>359</td><td>3</td><td><span class=low-hits>local mem_stop = gcinfo()</span></td></tr>
|
|
<tr><td>360</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>361</td><td>3</td><td><span class=low-hits>if not success then</span></td></tr>
|
|
<tr><td>362</td><td>0</td><td><span class=zero-hits>print(`{WALL}{color.red("ERROR")}{WALL} {name}`)</span></td></tr>
|
|
<tr><td>363</td><td>0</td><td><span class=zero-hits>print(color.gray(err_msg :: string))</span></td></tr>
|
|
<tr><td>364</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
|
|
<tr><td>365</td><td>3</td><td><span class=low-hits>time_start = bench.time_start or time_start</span></td></tr>
|
|
<tr><td>366</td><td>3</td><td><span class=low-hits>mem_start = bench.memory_start or mem_start</span></td></tr>
|
|
<tr><td>367</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>368</td><td>3</td><td><span class=low-hits>local n = bench.iterations or 1</span></td></tr>
|
|
<tr><td>369</td><td>3</td><td><span class=low-hits>local d, d_unit = convert_units("s", (time_stop - time_start) / n)</span></td></tr>
|
|
<tr><td>370</td><td>3</td><td><span class=low-hits>local a, a_unit = convert_units("B", math.round((mem_stop - mem_start) / n * 1e3))</span></td></tr>
|
|
<tr><td>371</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>372</td><td>3</td><td><span class=low-hits>local function round(x: number): string</span></td></tr>
|
|
<tr><td>373</td><td>0</td><td><span class=zero-hits>return x > 0 and x < 10 and (x - math.floor(x)) > 0 and string.format("%2.1f", x)</span></td></tr>
|
|
<tr><td>374</td><td>0</td><td><span class=zero-hits>or string.format("%3.f", x)</span></td></tr>
|
|
<tr><td>375</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>376</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>377</td><td>3</td><td><span class=low-hits>print(</span></td></tr>
|
|
<tr><td>378</td><td>3</td><td><span class=low-hits>string.format(</span></td></tr>
|
|
<tr><td>379</td><td>3</td><td><span class=low-hits>`%s %s %s %s{WALL} %s`,</span></td></tr>
|
|
<tr><td>380</td><td>3</td><td><span class=low-hits>color.gray(round(d)),</span></td></tr>
|
|
<tr><td>381</td><td>3</td><td><span class=low-hits>d_unit,</span></td></tr>
|
|
<tr><td>382</td><td>3</td><td><span class=low-hits>color.gray(round(a)),</span></td></tr>
|
|
<tr><td>383</td><td>3</td><td><span class=low-hits>a_unit,</span></td></tr>
|
|
<tr><td>384</td><td>3</td><td><span class=low-hits>color.gray(name)</span></td></tr>
|
|
<tr><td>385</td><td>0</td><td><span class=zero-hits>)</span></td></tr>
|
|
<tr><td>386</td><td>0</td><td><span class=zero-hits>)</span></td></tr>
|
|
<tr><td>387</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>388</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>389</td><td>3</td><td><span class=low-hits>bench = nil</span></td></tr>
|
|
<tr><td>390</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>391</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>392</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>393</td><td><span class='text-muted'>N/A</span></td><td>-- Printing</td>></tr>
|
|
<tr><td>394</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>395</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>396</td><td>1</td><td><span class=low-hits>local function print2(v: unknown)</span></td></tr>
|
|
<tr><td>397</td><td>0</td><td><span class=zero-hits>type Buffer = { n: number, [number]: string }</span></td></tr>
|
|
<tr><td>398</td><td>0</td><td><span class=zero-hits>type Cyclic = { n: number, [{}]: number }</span></td></tr>
|
|
<tr><td>399</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>400</td><td><span class='text-muted'>N/A</span></td><td>-- overkill concatenationless string buffer</td>></tr>
|
|
<tr><td>401</td><td>0</td><td><span class=zero-hits>local function tos(value: any, stack: number, str: Buffer, cyclic: Cyclic)</span></td></tr>
|
|
<tr><td>402</td><td>0</td><td><span class=zero-hits>local TAB = " "</span></td></tr>
|
|
<tr><td>403</td><td>0</td><td><span class=zero-hits>local indent = table.concat(table.create(stack, TAB))</span></td></tr>
|
|
<tr><td>404</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>405</td><td>0</td><td><span class=zero-hits>if type(value) == "string" then</span></td></tr>
|
|
<tr><td>406</td><td>0</td><td><span class=zero-hits>local n = str.n</span></td></tr>
|
|
<tr><td>407</td><td>0</td><td><span class=zero-hits>str[n + 1] = "\""</span></td></tr>
|
|
<tr><td>408</td><td>0</td><td><span class=zero-hits>str[n + 2] = value</span></td></tr>
|
|
<tr><td>409</td><td>0</td><td><span class=zero-hits>str[n + 3] = "\""</span></td></tr>
|
|
<tr><td>410</td><td>0</td><td><span class=zero-hits>str.n = n + 3</span></td></tr>
|
|
<tr><td>411</td><td>0</td><td><span class=zero-hits>elseif type(value) ~= "table" then</span></td></tr>
|
|
<tr><td>412</td><td>0</td><td><span class=zero-hits>local n = str.n</span></td></tr>
|
|
<tr><td>413</td><td>0</td><td><span class=zero-hits>str[n + 1] = value == nil and "nil" or tostring(value)</span></td></tr>
|
|
<tr><td>414</td><td>0</td><td><span class=zero-hits>str.n = n + 1</span></td></tr>
|
|
<tr><td>415</td><td>0</td><td><span class=zero-hits>elseif next(value) == nil then</span></td></tr>
|
|
<tr><td>416</td><td>0</td><td><span class=zero-hits>local n = str.n</span></td></tr>
|
|
<tr><td>417</td><td>0</td><td><span class=zero-hits>str[n + 1] = "{}"</span></td></tr>
|
|
<tr><td>418</td><td>0</td><td><span class=zero-hits>str.n = n + 1</span></td></tr>
|
|
<tr><td>419</td><td>0</td><td><span class=zero-hits>else -- is table</span></td></tr>
|
|
<tr><td>420</td><td>0</td><td><span class=zero-hits>local tabbed_indent = indent .. TAB</span></td></tr>
|
|
<tr><td>421</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>422</td><td>0</td><td><span class=zero-hits>if cyclic[value] then</span></td></tr>
|
|
<tr><td>423</td><td>0</td><td><span class=zero-hits>str.n += 1</span></td></tr>
|
|
<tr><td>424</td><td>0</td><td><span class=zero-hits>str[str.n] = color.gray(`CYCLIC REF {cyclic[value]}`)</span></td></tr>
|
|
<tr><td>425</td><td>0</td><td><span class=zero-hits>return</span></td></tr>
|
|
<tr><td>426</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
|
|
<tr><td>427</td><td>0</td><td><span class=zero-hits>cyclic.n += 1</span></td></tr>
|
|
<tr><td>428</td><td>0</td><td><span class=zero-hits>cyclic[value] = cyclic.n</span></td></tr>
|
|
<tr><td>429</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>430</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>431</td><td>0</td><td><span class=zero-hits>str.n += 3</span></td></tr>
|
|
<tr><td>432</td><td>0</td><td><span class=zero-hits>str[str.n - 2] = "{ "</span></td></tr>
|
|
<tr><td>433</td><td>0</td><td><span class=zero-hits>str[str.n - 1] = color.gray(tostring(cyclic[value]))</span></td></tr>
|
|
<tr><td>434</td><td>0</td><td><span class=zero-hits>str[str.n - 0] = "\n"</span></td></tr>
|
|
<tr><td>435</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>436</td><td>0</td><td><span class=zero-hits>local i, v = next(value, nil)</span></td></tr>
|
|
<tr><td>437</td><td>0</td><td><span class=zero-hits>while v ~= nil do</span></td></tr>
|
|
<tr><td>438</td><td>0</td><td><span class=zero-hits>local n = str.n</span></td></tr>
|
|
<tr><td>439</td><td>0</td><td><span class=zero-hits>str[n + 1] = tabbed_indent</span></td></tr>
|
|
<tr><td>440</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>441</td><td>0</td><td><span class=zero-hits>if type(i) ~= "string" then</span></td></tr>
|
|
<tr><td>442</td><td>0</td><td><span class=zero-hits>str[n + 2] = "["</span></td></tr>
|
|
<tr><td>443</td><td>0</td><td><span class=zero-hits>str[n + 3] = tostring(i)</span></td></tr>
|
|
<tr><td>444</td><td>0</td><td><span class=zero-hits>str[n + 4] = "]"</span></td></tr>
|
|
<tr><td>445</td><td>0</td><td><span class=zero-hits>n += 4</span></td></tr>
|
|
<tr><td>446</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
|
|
<tr><td>447</td><td>0</td><td><span class=zero-hits>str[n + 2] = tostring(i)</span></td></tr>
|
|
<tr><td>448</td><td>0</td><td><span class=zero-hits>n += 2</span></td></tr>
|
|
<tr><td>449</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>450</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>451</td><td>0</td><td><span class=zero-hits>str[n + 1] = " = "</span></td></tr>
|
|
<tr><td>452</td><td>0</td><td><span class=zero-hits>str.n = n + 1</span></td></tr>
|
|
<tr><td>453</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>454</td><td>0</td><td><span class=zero-hits>tos(v, stack + 1, str, cyclic)</span></td></tr>
|
|
<tr><td>455</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>456</td><td>0</td><td><span class=zero-hits>i, v = next(value, i)</span></td></tr>
|
|
<tr><td>457</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>458</td><td>0</td><td><span class=zero-hits>n = str.n</span></td></tr>
|
|
<tr><td>459</td><td>0</td><td><span class=zero-hits>str[n + 1] = v ~= nil and ",\n" or "\n"</span></td></tr>
|
|
<tr><td>460</td><td>0</td><td><span class=zero-hits>str.n = n + 1</span></td></tr>
|
|
<tr><td>461</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>462</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>463</td><td>0</td><td><span class=zero-hits>local n = str.n</span></td></tr>
|
|
<tr><td>464</td><td>0</td><td><span class=zero-hits>str[n + 1] = indent</span></td></tr>
|
|
<tr><td>465</td><td>0</td><td><span class=zero-hits>str[n + 2] = "}"</span></td></tr>
|
|
<tr><td>466</td><td>0</td><td><span class=zero-hits>str.n = n + 2</span></td></tr>
|
|
<tr><td>467</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>468</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>469</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>470</td><td>0</td><td><span class=zero-hits>local str = { n = 0 }</span></td></tr>
|
|
<tr><td>471</td><td>0</td><td><span class=zero-hits>local cyclic = { n = 0 }</span></td></tr>
|
|
<tr><td>472</td><td>0</td><td><span class=zero-hits>tos(v, 0, str, cyclic)</span></td></tr>
|
|
<tr><td>473</td><td>0</td><td><span class=zero-hits>print(table.concat(str))</span></td></tr>
|
|
<tr><td>474</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>475</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>476</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>477</td><td><span class='text-muted'>N/A</span></td><td>-- Equality</td>></tr>
|
|
<tr><td>478</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>479</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>480</td><td>1</td><td><span class=low-hits>local function shallow_eq(a: {}, b: {}): boolean</span></td></tr>
|
|
<tr><td>481</td><td>0</td><td><span class=zero-hits>if #a ~= #b then</span></td></tr>
|
|
<tr><td>482</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
|
|
<tr><td>483</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>484</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>485</td><td>0</td><td><span class=zero-hits>for i, v in next, a do</span></td></tr>
|
|
<tr><td>486</td><td>0</td><td><span class=zero-hits>if b[i] ~= v then</span></td></tr>
|
|
<tr><td>487</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
|
|
<tr><td>488</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>489</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>490</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>491</td><td>0</td><td><span class=zero-hits>for i, v in next, b do</span></td></tr>
|
|
<tr><td>492</td><td>0</td><td><span class=zero-hits>if a[i] ~= v then</span></td></tr>
|
|
<tr><td>493</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
|
|
<tr><td>494</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>495</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>496</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>497</td><td>0</td><td><span class=zero-hits>return true</span></td></tr>
|
|
<tr><td>498</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>499</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>500</td><td>1</td><td><span class=low-hits>local function deep_eq(a: {}, b: {}): boolean</span></td></tr>
|
|
<tr><td>501</td><td>0</td><td><span class=zero-hits>if #a ~= #b then</span></td></tr>
|
|
<tr><td>502</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
|
|
<tr><td>503</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>504</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>505</td><td>0</td><td><span class=zero-hits>for i, v in next, a do</span></td></tr>
|
|
<tr><td>506</td><td>0</td><td><span class=zero-hits>if type(b[i]) == "table" and type(v) == "table" then</span></td></tr>
|
|
<tr><td>507</td><td>0</td><td><span class=zero-hits>if deep_eq(b[i], v) == false then</span></td></tr>
|
|
<tr><td>508</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
|
|
<tr><td>509</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>510</td><td>0</td><td><span class=zero-hits>elseif b[i] ~= v then</span></td></tr>
|
|
<tr><td>511</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
|
|
<tr><td>512</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>513</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>514</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>515</td><td>0</td><td><span class=zero-hits>for i, v in next, b do</span></td></tr>
|
|
<tr><td>516</td><td>0</td><td><span class=zero-hits>if type(a[i]) == "table" and type(v) == "table" then</span></td></tr>
|
|
<tr><td>517</td><td>0</td><td><span class=zero-hits>if deep_eq(a[i], v) == false then</span></td></tr>
|
|
<tr><td>518</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
|
|
<tr><td>519</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>520</td><td>0</td><td><span class=zero-hits>elseif a[i] ~= v then</span></td></tr>
|
|
<tr><td>521</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
|
|
<tr><td>522</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>523</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>524</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>525</td><td>0</td><td><span class=zero-hits>return true</span></td></tr>
|
|
<tr><td>526</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
|
|
<tr><td>527</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>528</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>529</td><td><span class='text-muted'>N/A</span></td><td>-- Return</td>></tr>
|
|
<tr><td>530</td><td><span class='text-muted'>N/A</span></td><td>--------------------------------------------------------------------------------</td>></tr>
|
|
<tr><td>531</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>532</td><td>1</td><td><span class=low-hits>return {</span></td></tr>
|
|
<tr><td>533</td><td>1</td><td><span class=low-hits>test = function()</span></td></tr>
|
|
<tr><td>534</td><td>1</td><td><span class=low-hits>return {</span></td></tr>
|
|
<tr><td>535</td><td>1</td><td><span class=low-hits>TEST = TEST,</span></td></tr>
|
|
<tr><td>536</td><td>1</td><td><span class=low-hits>CASE = CASE,</span></td></tr>
|
|
<tr><td>537</td><td>1</td><td><span class=low-hits>CHECK = CHECK,</span></td></tr>
|
|
<tr><td>538</td><td>1</td><td><span class=low-hits>FINISH = FINISH,</span></td></tr>
|
|
<tr><td>539</td><td>1</td><td><span class=low-hits>SKIP = SKIP,</span></td></tr>
|
|
<tr><td>540</td><td>1</td><td><span class=low-hits>FOCUS = FOCUS,</span></td></tr>
|
|
<tr><td>541</td><td>1</td><td><span class=low-hits>CHECK_EXPECT_ERR = CHECK_EXPECT_ERR,</span></td></tr>
|
|
<tr><td>542</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
<tr><td>543</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>544</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>545</td><td>1</td><td><span class=low-hits>benchmark = function()</span></td></tr>
|
|
<tr><td>546</td><td>1</td><td><span class=low-hits>return BENCH, START</span></td></tr>
|
|
<tr><td>547</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>548</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>549</td><td>1</td><td><span class=low-hits>disable_formatting = function()</span></td></tr>
|
|
<tr><td>550</td><td>0</td><td><span class=zero-hits>disable_ansi = true</span></td></tr>
|
|
<tr><td>551</td><td><span class='text-muted'>N/A</span></td><td>end,</td>></tr>
|
|
<tr><td>552</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>553</td><td>1</td><td><span class=low-hits>print = print2,</span></td></tr>
|
|
<tr><td>554</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>555</td><td>1</td><td><span class=low-hits>seq = shallow_eq,</span></td></tr>
|
|
<tr><td>556</td><td>1</td><td><span class=low-hits>deq = deep_eq,</span></td></tr>
|
|
<tr><td>557</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
|
|
<tr><td>558</td><td>1</td><td><span class=low-hits>color = color,</span></td></tr>
|
|
<tr><td>559</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
|
|
</tbody></table></body></html> |