data-structure-typed 1.31.0 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/.gitattributes +112 -0
  2. package/CHANGELOG.md +1 -1
  3. package/CODE-OF-CONDUCT.md +80 -0
  4. package/COMMANDS.md +28 -0
  5. package/SECURITY.md +15 -0
  6. package/coverage/clover.xml +3393 -0
  7. package/coverage/coverage-final.json +67 -0
  8. package/coverage/lcov-report/base.css +224 -0
  9. package/coverage/lcov-report/block-navigation.js +87 -0
  10. package/coverage/lcov-report/favicon.png +0 -0
  11. package/coverage/lcov-report/index.html +386 -0
  12. package/coverage/lcov-report/prettify.css +1 -0
  13. package/coverage/lcov-report/prettify.js +2 -0
  14. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  15. package/coverage/lcov-report/sorter.js +196 -0
  16. package/coverage/lcov-report/src/data-structures/binary-tree/aa-tree.ts.html +88 -0
  17. package/coverage/lcov-report/src/data-structures/binary-tree/abstract-binary-tree.ts.html +4966 -0
  18. package/coverage/lcov-report/src/data-structures/binary-tree/avl-tree.ts.html +1015 -0
  19. package/coverage/lcov-report/src/data-structures/binary-tree/b-tree.ts.html +88 -0
  20. package/coverage/lcov-report/src/data-structures/binary-tree/binary-indexed-tree.ts.html +313 -0
  21. package/coverage/lcov-report/src/data-structures/binary-tree/binary-tree.ts.html +226 -0
  22. package/coverage/lcov-report/src/data-structures/binary-tree/bst.ts.html +1714 -0
  23. package/coverage/lcov-report/src/data-structures/binary-tree/index.html +296 -0
  24. package/coverage/lcov-report/src/data-structures/binary-tree/index.ts.html +121 -0
  25. package/coverage/lcov-report/src/data-structures/binary-tree/rb-tree.ts.html +388 -0
  26. package/coverage/lcov-report/src/data-structures/binary-tree/segment-tree.ts.html +811 -0
  27. package/coverage/lcov-report/src/data-structures/binary-tree/splay-tree.ts.html +88 -0
  28. package/coverage/lcov-report/src/data-structures/binary-tree/tree-multiset.ts.html +2185 -0
  29. package/coverage/lcov-report/src/data-structures/binary-tree/two-three-tree.ts.html +88 -0
  30. package/coverage/lcov-report/src/data-structures/graph/abstract-graph.ts.html +3205 -0
  31. package/coverage/lcov-report/src/data-structures/graph/directed-graph.ts.html +1495 -0
  32. package/coverage/lcov-report/src/data-structures/graph/index.html +176 -0
  33. package/coverage/lcov-report/src/data-structures/graph/index.ts.html +97 -0
  34. package/coverage/lcov-report/src/data-structures/graph/map-graph.ts.html +472 -0
  35. package/coverage/lcov-report/src/data-structures/graph/undirected-graph.ts.html +907 -0
  36. package/coverage/lcov-report/src/data-structures/hash/coordinate-map.ts.html +286 -0
  37. package/coverage/lcov-report/src/data-structures/hash/coordinate-set.ts.html +253 -0
  38. package/coverage/lcov-report/src/data-structures/hash/hash-table.ts.html +88 -0
  39. package/coverage/lcov-report/src/data-structures/hash/index.html +206 -0
  40. package/coverage/lcov-report/src/data-structures/hash/index.ts.html +103 -0
  41. package/coverage/lcov-report/src/data-structures/hash/pair.ts.html +88 -0
  42. package/coverage/lcov-report/src/data-structures/hash/tree-map.ts.html +88 -0
  43. package/coverage/lcov-report/src/data-structures/hash/tree-set.ts.html +88 -0
  44. package/coverage/lcov-report/src/data-structures/heap/heap.ts.html +721 -0
  45. package/coverage/lcov-report/src/data-structures/heap/index.html +161 -0
  46. package/coverage/lcov-report/src/data-structures/heap/index.ts.html +94 -0
  47. package/coverage/lcov-report/src/data-structures/heap/max-heap.ts.html +178 -0
  48. package/coverage/lcov-report/src/data-structures/heap/min-heap.ts.html +181 -0
  49. package/coverage/lcov-report/src/data-structures/index.html +116 -0
  50. package/coverage/lcov-report/src/data-structures/index.ts.html +118 -0
  51. package/coverage/lcov-report/src/data-structures/linked-list/doubly-linked-list.ts.html +1804 -0
  52. package/coverage/lcov-report/src/data-structures/linked-list/index.html +161 -0
  53. package/coverage/lcov-report/src/data-structures/linked-list/index.ts.html +94 -0
  54. package/coverage/lcov-report/src/data-structures/linked-list/singly-linked-list.ts.html +1588 -0
  55. package/coverage/lcov-report/src/data-structures/linked-list/skip-linked-list.ts.html +88 -0
  56. package/coverage/lcov-report/src/data-structures/matrix/index.html +176 -0
  57. package/coverage/lcov-report/src/data-structures/matrix/index.ts.html +97 -0
  58. package/coverage/lcov-report/src/data-structures/matrix/matrix.ts.html +166 -0
  59. package/coverage/lcov-report/src/data-structures/matrix/matrix2d.ts.html +721 -0
  60. package/coverage/lcov-report/src/data-structures/matrix/navigator.ts.html +448 -0
  61. package/coverage/lcov-report/src/data-structures/matrix/vector2d.ts.html +1033 -0
  62. package/coverage/lcov-report/src/data-structures/priority-queue/index.html +161 -0
  63. package/coverage/lcov-report/src/data-structures/priority-queue/index.ts.html +94 -0
  64. package/coverage/lcov-report/src/data-structures/priority-queue/max-priority-queue.ts.html +253 -0
  65. package/coverage/lcov-report/src/data-structures/priority-queue/min-priority-queue.ts.html +256 -0
  66. package/coverage/lcov-report/src/data-structures/priority-queue/priority-queue.ts.html +1162 -0
  67. package/coverage/lcov-report/src/data-structures/queue/deque.ts.html +976 -0
  68. package/coverage/lcov-report/src/data-structures/queue/index.html +146 -0
  69. package/coverage/lcov-report/src/data-structures/queue/index.ts.html +91 -0
  70. package/coverage/lcov-report/src/data-structures/queue/queue.ts.html +658 -0
  71. package/coverage/lcov-report/src/data-structures/stack/index.html +131 -0
  72. package/coverage/lcov-report/src/data-structures/stack/index.ts.html +88 -0
  73. package/coverage/lcov-report/src/data-structures/stack/stack.ts.html +379 -0
  74. package/coverage/lcov-report/src/data-structures/tree/index.html +131 -0
  75. package/coverage/lcov-report/src/data-structures/tree/index.ts.html +88 -0
  76. package/coverage/lcov-report/src/data-structures/tree/tree.ts.html +292 -0
  77. package/coverage/lcov-report/src/data-structures/trie/index.html +131 -0
  78. package/coverage/lcov-report/src/data-structures/trie/index.ts.html +88 -0
  79. package/coverage/lcov-report/src/data-structures/trie/trie.ts.html +760 -0
  80. package/coverage/lcov-report/src/index.html +116 -0
  81. package/coverage/lcov-report/src/index.ts.html +97 -0
  82. package/coverage/lcov-report/src/interfaces/index.html +116 -0
  83. package/coverage/lcov-report/src/interfaces/index.ts.html +130 -0
  84. package/coverage/lcov-report/src/types/data-structures/abstract-binary-tree.ts.html +235 -0
  85. package/coverage/lcov-report/src/types/data-structures/bst.ts.html +124 -0
  86. package/coverage/lcov-report/src/types/data-structures/directed-graph.ts.html +109 -0
  87. package/coverage/lcov-report/src/types/data-structures/index.html +176 -0
  88. package/coverage/lcov-report/src/types/data-structures/index.ts.html +130 -0
  89. package/coverage/lcov-report/src/types/data-structures/rb-tree.ts.html +106 -0
  90. package/coverage/lcov-report/src/types/index.html +116 -0
  91. package/coverage/lcov-report/src/types/index.ts.html +94 -0
  92. package/coverage/lcov-report/src/types/utils/index.html +116 -0
  93. package/coverage/lcov-report/src/types/utils/index.ts.html +91 -0
  94. package/coverage/lcov-report/src/utils/index.html +131 -0
  95. package/coverage/lcov-report/src/utils/index.ts.html +88 -0
  96. package/coverage/lcov-report/src/utils/utils.ts.html +322 -0
  97. package/coverage/lcov-report/test/utils/index.html +146 -0
  98. package/coverage/lcov-report/test/utils/index.ts.html +91 -0
  99. package/coverage/lcov-report/test/utils/magnitude.ts.html +148 -0
  100. package/coverage/lcov-report/test/utils/number.ts.html +94 -0
  101. package/coverage/lcov.info +6676 -0
  102. package/dist/data-structures/binary-tree/abstract-binary-tree.js.map +1 -1
  103. package/docs/classes/AVLTree.html +205 -282
  104. package/docs/classes/AVLTreeNode.html +15 -15
  105. package/docs/classes/AaTree.html +1 -1
  106. package/docs/classes/AbstractBinaryTree.html +198 -275
  107. package/docs/classes/AbstractBinaryTreeNode.html +21 -21
  108. package/docs/classes/AbstractEdge.html +11 -11
  109. package/docs/classes/AbstractGraph.html +36 -36
  110. package/docs/classes/AbstractVertex.html +8 -8
  111. package/docs/classes/ArrayDeque.html +14 -14
  112. package/docs/classes/BST.html +198 -275
  113. package/docs/classes/BSTNode.html +15 -15
  114. package/docs/classes/BTree.html +1 -1
  115. package/docs/classes/BinaryIndexedTree.html +9 -9
  116. package/docs/classes/BinaryTree.html +191 -268
  117. package/docs/classes/BinaryTreeNode.html +15 -15
  118. package/docs/classes/Character.html +4 -4
  119. package/docs/classes/CoordinateMap.html +9 -9
  120. package/docs/classes/CoordinateSet.html +8 -8
  121. package/docs/classes/Deque.html +34 -34
  122. package/docs/classes/DirectedEdge.html +15 -15
  123. package/docs/classes/DirectedGraph.html +52 -52
  124. package/docs/classes/DirectedVertex.html +6 -6
  125. package/docs/classes/DoublyLinkedList.html +37 -37
  126. package/docs/classes/DoublyLinkedListNode.html +11 -11
  127. package/docs/classes/HashTable.html +1 -1
  128. package/docs/classes/Heap.html +26 -26
  129. package/docs/classes/HeapItem.html +8 -8
  130. package/docs/classes/LinkedListQueue.html +35 -35
  131. package/docs/classes/MapEdge.html +13 -13
  132. package/docs/classes/MapGraph.html +56 -56
  133. package/docs/classes/MapVertex.html +12 -12
  134. package/docs/classes/Matrix2D.html +16 -16
  135. package/docs/classes/MatrixNTI2D.html +4 -4
  136. package/docs/classes/MaxHeap.html +26 -26
  137. package/docs/classes/MaxPriorityQueue.html +34 -34
  138. package/docs/classes/MinHeap.html +26 -26
  139. package/docs/classes/MinPriorityQueue.html +34 -34
  140. package/docs/classes/Navigator.html +10 -10
  141. package/docs/classes/ObjectDeque.html +25 -25
  142. package/docs/classes/Pair.html +1 -1
  143. package/docs/classes/PriorityQueue.html +32 -32
  144. package/docs/classes/Queue.html +22 -22
  145. package/docs/classes/RBTree.html +198 -275
  146. package/docs/classes/RBTreeNode.html +18 -18
  147. package/docs/classes/SegmentTree.html +17 -17
  148. package/docs/classes/SegmentTreeNode.html +20 -20
  149. package/docs/classes/SinglyLinkedList.html +35 -35
  150. package/docs/classes/SinglyLinkedListNode.html +8 -8
  151. package/docs/classes/SkipLinkedList.html +1 -1
  152. package/docs/classes/SplayTree.html +1 -1
  153. package/docs/classes/Stack.html +12 -12
  154. package/docs/classes/TreeMap.html +1 -1
  155. package/docs/classes/TreeMultiset.html +219 -296
  156. package/docs/classes/TreeMultisetNode.html +18 -18
  157. package/docs/classes/TreeNode.html +13 -13
  158. package/docs/classes/TreeSet.html +1 -1
  159. package/docs/classes/Trie.html +13 -13
  160. package/docs/classes/TrieNode.html +11 -11
  161. package/docs/classes/TwoThreeTree.html +1 -1
  162. package/docs/classes/UndirectedEdge.html +12 -12
  163. package/docs/classes/UndirectedGraph.html +40 -40
  164. package/docs/classes/UndirectedVertex.html +6 -6
  165. package/docs/classes/Vector2D.html +28 -28
  166. package/docs/enums/CP.html +4 -4
  167. package/docs/enums/FamilyPosition.html +8 -8
  168. package/docs/enums/LoopType.html +3 -3
  169. package/docs/enums/RBColor.html +3 -3
  170. package/docs/enums/TopologicalProperty.html +4 -4
  171. package/docs/functions/arrayRemove.html +1 -1
  172. package/docs/functions/isThunk.html +1 -1
  173. package/docs/functions/toThunk.html +1 -1
  174. package/docs/functions/trampoline.html +1 -1
  175. package/docs/functions/trampolineAsync.html +1 -1
  176. package/docs/functions/uuidV4.html +1 -1
  177. package/docs/interfaces/IAVLTree.html +77 -77
  178. package/docs/interfaces/IAbstractBinaryTree.html +72 -72
  179. package/docs/interfaces/IAbstractBinaryTreeNode.html +14 -14
  180. package/docs/interfaces/IAbstractGraph.html +15 -15
  181. package/docs/interfaces/IBST.html +77 -77
  182. package/docs/interfaces/IDirectedGraph.html +23 -23
  183. package/docs/interfaces/IRBTree.html +77 -77
  184. package/docs/interfaces/IUNDirectedGraph.html +16 -16
  185. package/docs/types/AVLTreeNodeNested.html +1 -1
  186. package/docs/types/AVLTreeOptions.html +1 -1
  187. package/docs/types/AbstractBinaryTreeNodeNested.html +1 -1
  188. package/docs/types/AbstractBinaryTreeNodeProperties.html +1 -1
  189. package/docs/types/AbstractBinaryTreeNodeProperty.html +1 -1
  190. package/docs/types/AbstractBinaryTreeOptions.html +1 -1
  191. package/docs/types/BSTComparator.html +1 -1
  192. package/docs/types/BSTNodeNested.html +1 -1
  193. package/docs/types/BSTOptions.html +1 -1
  194. package/docs/types/BinaryTreeDeletedResult.html +1 -1
  195. package/docs/types/BinaryTreeNodeId.html +1 -1
  196. package/docs/types/BinaryTreeNodeNested.html +1 -1
  197. package/docs/types/BinaryTreeNodePropertyName.html +1 -1
  198. package/docs/types/BinaryTreeOptions.html +1 -1
  199. package/docs/types/DFSOrderPattern.html +1 -1
  200. package/docs/types/DijkstraResult.html +1 -1
  201. package/docs/types/Direction.html +1 -1
  202. package/docs/types/DummyAny.html +1 -1
  203. package/docs/types/EdgeId.html +1 -1
  204. package/docs/types/HeapOptions.html +1 -1
  205. package/docs/types/IAVLTreeNode.html +1 -1
  206. package/docs/types/IBSTNode.html +1 -1
  207. package/docs/types/IBinaryTree.html +1 -1
  208. package/docs/types/IBinaryTreeNode.html +1 -1
  209. package/docs/types/IRBTreeNode.html +1 -1
  210. package/docs/types/ITreeMultiset.html +1 -1
  211. package/docs/types/ITreeMultisetNode.html +1 -1
  212. package/docs/types/KeyValueObject.html +1 -1
  213. package/docs/types/KeyValueObjectWithId.html +1 -1
  214. package/docs/types/MapGraphCoordinate.html +1 -1
  215. package/docs/types/NavigatorParams.html +1 -1
  216. package/docs/types/NodeOrPropertyName.html +1 -1
  217. package/docs/types/NonNumberNonObjectButDefined.html +1 -1
  218. package/docs/types/ObjectWithNonNumberId.html +1 -1
  219. package/docs/types/ObjectWithNumberId.html +1 -1
  220. package/docs/types/ObjectWithoutId.html +1 -1
  221. package/docs/types/PriorityQueueComparator.html +1 -1
  222. package/docs/types/PriorityQueueDFSOrderPattern.html +1 -1
  223. package/docs/types/PriorityQueueOptions.html +1 -1
  224. package/docs/types/RBTreeNodeNested.html +1 -1
  225. package/docs/types/RBTreeOptions.html +1 -1
  226. package/docs/types/RestrictValById.html +1 -1
  227. package/docs/types/SegmentTreeNodeVal.html +1 -1
  228. package/docs/types/SpecifyOptional.html +1 -1
  229. package/docs/types/Thunk.html +1 -1
  230. package/docs/types/ToThunkFn.html +1 -1
  231. package/docs/types/TopologicalStatus.html +1 -1
  232. package/docs/types/TreeMultisetNodeNested.html +1 -1
  233. package/docs/types/TreeMultisetOptions.html +1 -1
  234. package/docs/types/TrlAsyncFn.html +1 -1
  235. package/docs/types/TrlFn.html +1 -1
  236. package/docs/types/Turning.html +1 -1
  237. package/docs/types/VertexId.html +1 -1
  238. package/docs/variables/THUNK_SYMBOL.html +1 -1
  239. package/jest.config.js +5 -3
  240. package/lib/data-structures/binary-tree/abstract-binary-tree.d.ts +169 -2
  241. package/lib/data-structures/binary-tree/abstract-binary-tree.js +31 -47
  242. package/package.json +26 -23
  243. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +1 -1
  244. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +3 -1
  245. package/tsconfig.json +1 -1
  246. package/umd/bundle.min.js.map +1 -1
@@ -0,0 +1,1033 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/data-structures/matrix/vector2d.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../index.html">All files</a> / <a href="index.html">src/data-structures/matrix</a> vector2d.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">4.25% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>2/47</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/16</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/23</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">4.25% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>2/47</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-yes">19x</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-no">&nbsp;</span>
392
+ <span class="cline-any cline-no">&nbsp;</span>
393
+ <span class="cline-any cline-no">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-no">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-no">&nbsp;</span>
410
+ <span class="cline-any cline-neutral">&nbsp;</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-neutral">&nbsp;</span>
426
+ <span class="cline-any cline-no">&nbsp;</span>
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-no">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-no">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-neutral">&nbsp;</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-no">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-neutral">&nbsp;</span>
473
+ <span class="cline-any cline-neutral">&nbsp;</span>
474
+ <span class="cline-any cline-neutral">&nbsp;</span>
475
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
+ <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-neutral">&nbsp;</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-no">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-no">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-no">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-no">&nbsp;</span>
519
+ <span class="cline-any cline-no">&nbsp;</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-no">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-neutral">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-no">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-no">&nbsp;</span>
551
+ <span class="cline-any cline-no">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-no">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-no">&nbsp;</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-neutral">&nbsp;</span>
570
+ <span class="cline-any cline-neutral">&nbsp;</span>
571
+ <span class="cline-any cline-neutral">&nbsp;</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-neutral">&nbsp;</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-neutral">&nbsp;</span>
593
+ <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-no">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-neutral">&nbsp;</span>
609
+ <span class="cline-any cline-neutral">&nbsp;</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-neutral">&nbsp;</span>
613
+ <span class="cline-any cline-neutral">&nbsp;</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
+ <span class="cline-any cline-neutral">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-neutral">&nbsp;</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-no">&nbsp;</span>
627
+ <span class="cline-any cline-no">&nbsp;</span>
628
+ <span class="cline-any cline-no">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span>
631
+ <span class="cline-any cline-neutral">&nbsp;</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-neutral">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
+ <span class="cline-any cline-no">&nbsp;</span>
643
+ <span class="cline-any cline-neutral">&nbsp;</span>
644
+ <span class="cline-any cline-neutral">&nbsp;</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-neutral">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-neutral">&nbsp;</span>
654
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-no">&nbsp;</span>
656
+ <span class="cline-any cline-no">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-no">&nbsp;</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
671
+ <span class="cline-any cline-no">&nbsp;</span>
672
+ <span class="cline-any cline-no">&nbsp;</span>
673
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-neutral">&nbsp;</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-neutral">&nbsp;</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</span>
683
+ <span class="cline-any cline-no">&nbsp;</span>
684
+ <span class="cline-any cline-no">&nbsp;</span>
685
+ <span class="cline-any cline-no">&nbsp;</span>
686
+ <span class="cline-any cline-neutral">&nbsp;</span>
687
+ <span class="cline-any cline-neutral">&nbsp;</span>
688
+ <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-neutral">&nbsp;</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
694
+ <span class="cline-any cline-neutral">&nbsp;</span>
695
+ <span class="cline-any cline-neutral">&nbsp;</span>
696
+ <span class="cline-any cline-neutral">&nbsp;</span>
697
+ <span class="cline-any cline-yes">19x</span>
698
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
699
+ * data-structure-typed
700
+ *
701
+ * @author Tyler Zeng
702
+ * @copyright Copyright (c) 2022 Tyler Zeng &lt;zrwusa@gmail.com&gt;
703
+ * @license MIT License
704
+ */
705
+ export class Vector2D {
706
+ constructor(
707
+ public <span class="cstat-no" title="statement not covered" >x: number = <span class="branch-0 cbranch-no" title="branch not covered" >0</span>,</span>
708
+ public <span class="cstat-no" title="statement not covered" >y: number = <span class="branch-0 cbranch-no" title="branch not covered" >0</span>,</span>
709
+ public <span class="cstat-no" title="statement not covered" >w: number = <span class="branch-0 cbranch-no" title="branch not covered" >1</span> </span>// needed for matrix multiplication
710
+ ) {}
711
+ &nbsp;
712
+ /**
713
+ * The function checks if the x and y values of a point are both zero.
714
+ * @returns A boolean value indicating whether both the x and y properties of the object are equal to 0.
715
+ */
716
+ <span class="fstat-no" title="function not covered" > get i</span>sZero(): boolean {
717
+ <span class="cstat-no" title="statement not covered" > return this.x === 0 &amp;&amp; this.y === 0;</span>
718
+ }
719
+ &nbsp;
720
+ /**
721
+ * The above function calculates the length of a vector using the Pythagorean theorem.
722
+ * @returns The length of a vector, calculated using the Pythagorean theorem.
723
+ */
724
+ <span class="fstat-no" title="function not covered" > get l</span>ength(): number {
725
+ <span class="cstat-no" title="statement not covered" > return Math.sqrt(this.x * this.x + this.y * this.y);</span>
726
+ }
727
+ &nbsp;
728
+ /**
729
+ * The function calculates the square of the length of a vector.
730
+ * @returns The method is returning the sum of the squares of the x and y values.
731
+ */
732
+ <span class="fstat-no" title="function not covered" > get l</span>engthSq(): number {
733
+ <span class="cstat-no" title="statement not covered" > return this.x * this.x + this.y * this.y;</span>
734
+ }
735
+ &nbsp;
736
+ /**
737
+ * The "rounded" function returns a new Vector2D object with the x and y values rounded to the nearest whole number.
738
+ * @returns The method is returning a new instance of the Vector2D class with the x and y values rounded to the nearest
739
+ * whole number.
740
+ */
741
+ <span class="fstat-no" title="function not covered" > get r</span>ounded(): Vector2D {
742
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(Math.round(this.x), Math.round(this.y));</span>
743
+ }
744
+ &nbsp;
745
+ /**
746
+ * The function "add" takes two Vector2D objects as parameters and returns a new Vector2D object with the sum of their
747
+ * x and y components.
748
+ * @param {Vector2D} vector1 - The parameter `vector1` is an instance of the `Vector2D` class. It represents a
749
+ * 2-dimensional vector with an `x` and `y` component.
750
+ * @param {Vector2D} vector2 - The parameter "vector2" is of type Vector2D. It represents a 2-dimensional vector with
751
+ * an x and y component.
752
+ * @returns The method is returning a new instance of the Vector2D class with the x and y components of the two input
753
+ * vectors added together.
754
+ */
755
+ <span class="fstat-no" title="function not covered" > static </span>add(vector1: Vector2D, vector2: Vector2D): Vector2D {
756
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(vector1.x + vector2.x, vector1.y + vector2.y);</span>
757
+ }
758
+ &nbsp;
759
+ /**
760
+ * The subtract function takes two Vector2D objects as parameters and returns a new Vector2D object with the x and y
761
+ * components subtracted.
762
+ * @param {Vector2D} vector1 - The parameter `vector1` is an instance of the `Vector2D` class, representing a
763
+ * 2-dimensional vector. It has properties `x` and `y` which represent the x and y components of the vector
764
+ * respectively.
765
+ * @param {Vector2D} vector2 - The parameter "vector2" is a Vector2D object. It represents the second vector that you
766
+ * want to subtract from the first vector.
767
+ * @returns The method is returning a new Vector2D object with the x and y components subtracted from vector1 and
768
+ * vector2.
769
+ */
770
+ <span class="fstat-no" title="function not covered" > static </span>subtract(vector1: Vector2D, vector2: Vector2D): Vector2D {
771
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(vector1.x - vector2.x, vector1.y - vector2.y);</span>
772
+ }
773
+ &nbsp;
774
+ /**
775
+ * The function subtracts a given value from the x and y components of a Vector2D object and returns a new Vector2D
776
+ * object.
777
+ * @param {Vector2D} vector - The parameter "vector" is of type Vector2D, which represents a 2-dimensional vector with
778
+ * x and y components.
779
+ * @param {number} value - The "value" parameter is a number that will be subtracted from both the x and y components
780
+ * of the "vector" parameter.
781
+ * @returns A new Vector2D object with the x and y values subtracted by the given value.
782
+ */
783
+ <span class="fstat-no" title="function not covered" > static </span>subtractValue(vector: Vector2D, value: number): Vector2D {
784
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(vector.x - value, vector.y - value);</span>
785
+ }
786
+ &nbsp;
787
+ /**
788
+ * The function multiplies a Vector2D object by a given value.
789
+ * @param {Vector2D} vector - The parameter "vector" is of type Vector2D, which represents a 2-dimensional vector with
790
+ * x and y components.
791
+ * @param {number} value - The "value" parameter is a number that represents the value by which the x and y components
792
+ * of the vector will be multiplied.
793
+ * @returns A new Vector2D object with the x and y values multiplied by the given value.
794
+ */
795
+ <span class="fstat-no" title="function not covered" > static </span>multiply(vector: Vector2D, value: number): Vector2D {
796
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(vector.x * value, vector.y * value);</span>
797
+ }
798
+ &nbsp;
799
+ /**
800
+ * The function divides the x and y components of a Vector2D by a given value and returns a new Vector2D.
801
+ * @param {Vector2D} vector - The parameter "vector" is of type Vector2D, which represents a 2-dimensional vector with
802
+ * x and y components.
803
+ * @param {number} value - The value parameter is a number that will be used to divide the x and y components of the
804
+ * vector.
805
+ * @returns A new instance of the Vector2D class with the x and y values divided by the given value.
806
+ */
807
+ <span class="fstat-no" title="function not covered" > static </span>divide(vector: Vector2D, value: number): Vector2D {
808
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(vector.x / value, vector.y / value);</span>
809
+ }
810
+ &nbsp;
811
+ /**
812
+ * The function checks if two Vector2D objects are equal by comparing their x and y values.
813
+ * @param {Vector2D} vector1 - The parameter `vector1` is of type `Vector2D`, which represents a 2-dimensional vector.
814
+ * It has two properties: `x` and `y`, which represent the x and y components of the vector, respectively.
815
+ * @param {Vector2D} vector2 - The parameter "vector2" is of type Vector2D.
816
+ * @returns a boolean value, which indicates whether the two input vectors are equal or not.
817
+ */
818
+ <span class="fstat-no" title="function not covered" > static </span>equals(vector1: Vector2D, vector2: Vector2D): boolean {
819
+ <span class="cstat-no" title="statement not covered" > return vector1.x === vector2.x &amp;&amp; vector1.y === vector2.y;</span>
820
+ }
821
+ &nbsp;
822
+ /**
823
+ * The function checks if two Vector2D objects are equal within a specified rounding factor.
824
+ * @param {Vector2D} vector1 - The first vector to compare.
825
+ * @param {Vector2D} vector2 - The parameter "vector2" is a Vector2D object, which represents a 2-dimensional vector.
826
+ * It is used as one of the inputs for the "equalsRounded" function.
827
+ * @param [roundingFactor=12] - The roundingFactor parameter is used to determine the threshold for considering two
828
+ * vectors as equal. If the absolute difference in the x and y components of the vectors is less than the
829
+ * roundingFactor, the vectors are considered equal.
830
+ * @returns a boolean value.
831
+ */
832
+ <span class="fstat-no" title="function not covered" > static </span>equalsRounded(vector1: Vector2D, vector2: Vector2D, roundingFactor = <span class="branch-0 cbranch-no" title="branch not covered" >12)</span>: boolean {
833
+ const vector = <span class="cstat-no" title="statement not covered" >Vector2D.abs(Vector2D.subtract(vector1, vector2));</span>
834
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (vector.x &lt; roundingFactor &amp;&amp; vector.y &lt; roundingFactor) {</span>
835
+ <span class="cstat-no" title="statement not covered" > return true;</span>
836
+ }
837
+ &nbsp;
838
+ <span class="cstat-no" title="statement not covered" > return false;</span>
839
+ }
840
+ &nbsp;
841
+ /**
842
+ * The normalize function takes a vector as input and returns a normalized version of the vector.Normalizes the vector if it matches a certain condition
843
+ * @param {Vector2D} vector - The parameter "vector" is of type Vector2D.
844
+ * @returns the normalized vector if its length is greater than a very small value (epsilon), otherwise it returns the
845
+ * original vector.
846
+ */
847
+ <span class="fstat-no" title="function not covered" > static </span>normalize(vector: Vector2D): Vector2D {
848
+ const length = <span class="cstat-no" title="statement not covered" >vector.length;</span>
849
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (length &gt; 2.220446049250313e-16) {</span>
850
+ // Epsilon
851
+ <span class="cstat-no" title="statement not covered" > return Vector2D.divide(vector, length);</span>
852
+ }
853
+ &nbsp;
854
+ <span class="cstat-no" title="statement not covered" > return vector;</span>
855
+ }
856
+ &nbsp;
857
+ /**
858
+ * The function truncates a vector to a maximum length if it exceeds that length.Adjusts x and y so that the length of the vector does not exceed max
859
+ * @param {Vector2D} vector - A 2D vector represented by the Vector2D class.
860
+ * @param {number} max - The `max` parameter is a number that represents the maximum length that the `vector` should
861
+ * have.
862
+ * @returns either the original vector or a truncated version of the vector, depending on whether the length of the
863
+ * vector is greater than the maximum value specified.
864
+ */
865
+ <span class="fstat-no" title="function not covered" > static </span>truncate(vector: Vector2D, max: number): Vector2D {
866
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (vector.length &gt; max) {</span>
867
+ <span class="cstat-no" title="statement not covered" > return Vector2D.multiply(Vector2D.normalize(vector), max);</span>
868
+ }
869
+ &nbsp;
870
+ <span class="cstat-no" title="statement not covered" > return vector;</span>
871
+ }
872
+ &nbsp;
873
+ /**
874
+ * The function returns a new Vector2D object that is perpendicular to the input vector.The vector that is perpendicular to this one
875
+ * @param {Vector2D} vector - The parameter "vector" is of type Vector2D.
876
+ * @returns A new Vector2D object is being returned.
877
+ */
878
+ <span class="fstat-no" title="function not covered" > static </span>perp(vector: Vector2D): Vector2D {
879
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(-vector.y, vector.x);</span>
880
+ }
881
+ &nbsp;
882
+ /**
883
+ * The reverse function takes a Vector2D object and returns a new Vector2D object with the negated x and y values.
884
+ * @param {Vector2D} vector - The parameter "vector" is of type Vector2D, which represents a 2-dimensional vector. It
885
+ * has two properties: "x" and "y", which represent the x and y components of the vector, respectively.
886
+ * @returns A new Vector2D object with the negated x and y values of the input vector. Returns the vector that is the reverse of this vector
887
+ */
888
+ <span class="fstat-no" title="function not covered" > static </span>reverse(vector: Vector2D): Vector2D {
889
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(-vector.x, -vector.y);</span>
890
+ }
891
+ &nbsp;
892
+ /**
893
+ * The function takes a Vector2D object as input and returns a new Vector2D object with the absolute values of its x
894
+ * and y components.
895
+ * @param {Vector2D} vector - The parameter "vector" is of type Vector2D, which represents a 2-dimensional vector. It
896
+ * has two properties: "x" and "y", which represent the x and y components of the vector, respectively.
897
+ * @returns The method is returning a new Vector2D object with the absolute values of the x and y components of the
898
+ * input vector.
899
+ */
900
+ <span class="fstat-no" title="function not covered" > static </span>abs(vector: Vector2D): Vector2D {
901
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(Math.abs(vector.x), Math.abs(vector.y));</span>
902
+ }
903
+ &nbsp;
904
+ /**
905
+ * The dot function calculates the dot product of two 2D vectors.The dot product of v1 and v2
906
+ * @param {Vector2D} vector1 - The parameter `vector1` represents a 2D vector with its x and y components.
907
+ * @param {Vector2D} vector2 - The "vector2" parameter is a Vector2D object. It represents a two-dimensional vector
908
+ * with an x and y component.
909
+ * @returns The dot product of the two input vectors.
910
+ */
911
+ <span class="fstat-no" title="function not covered" > static </span>dot(vector1: Vector2D, vector2: Vector2D): number {
912
+ <span class="cstat-no" title="statement not covered" > return vector1.x * vector2.x + vector1.y * vector2.y;</span>
913
+ }
914
+ &nbsp;
915
+ // /**
916
+ // * Transform vectors based on the current tranformation matrices: translation, rotation and scale
917
+ // * @param vectors The vectors to transform
918
+ // */
919
+ // static transform(vector: Vector2D, transformation: Matrix2D): Vector2D {
920
+ // return Matrix2D.multiplyByVector(transformation, vector)
921
+ // }
922
+ &nbsp;
923
+ // /**
924
+ // * Transform vectors based on the current tranformation matrices: translation, rotation and scale
925
+ // * @param vectors The vectors to transform
926
+ // */
927
+ // static transformList(vectors: Vector2D[], transformation: Matrix2D): Vector2D[] {
928
+ // return vectors.map(vector =&gt; Matrix2D.multiplyByVector(transformation, vector))
929
+ // }
930
+ &nbsp;
931
+ /**
932
+ * The function calculates the distance between two points in a two-dimensional space.
933
+ * @param {Vector2D} vector1 - The parameter `vector1` represents the first vector in 2D space, while `vector2`
934
+ * represents the second vector. Each vector has an `x` and `y` component, which represent their respective coordinates
935
+ * in the 2D space.
936
+ * @param {Vector2D} vector2 - The `vector2` parameter represents the second vector in the calculation of distance. It
937
+ * is an instance of the `Vector2D` class, which typically has properties `x` and `y` representing the coordinates of
938
+ * the vector in a 2D space.
939
+ * @returns The distance between vector1 and vector2.
940
+ */
941
+ <span class="fstat-no" title="function not covered" > static </span>distance(vector1: Vector2D, vector2: Vector2D): number {
942
+ const ySeparation = <span class="cstat-no" title="statement not covered" >vector2.y - vector1.y;</span>
943
+ const xSeparation = <span class="cstat-no" title="statement not covered" >vector2.x - vector1.x;</span>
944
+ <span class="cstat-no" title="statement not covered" > return Math.sqrt(ySeparation * ySeparation + xSeparation * xSeparation);</span>
945
+ }
946
+ &nbsp;
947
+ /**
948
+ * The function calculates the squared distance between two 2D vectors.
949
+ * @param {Vector2D} vector1 - The parameter `vector1` represents the first vector, which is an instance of the
950
+ * `Vector2D` class. It contains the x and y coordinates of the vector.
951
+ * @param {Vector2D} vector2 - The `vector2` parameter represents the second vector in a two-dimensional space. It has
952
+ * properties `x` and `y` which represent the coordinates of the vector.
953
+ * @returns the square of the distance between the two input vectors.
954
+ */
955
+ <span class="fstat-no" title="function not covered" > static </span>distanceSq(vector1: Vector2D, vector2: Vector2D): number {
956
+ const ySeparation = <span class="cstat-no" title="statement not covered" >vector2.y - vector1.y;</span>
957
+ const xSeparation = <span class="cstat-no" title="statement not covered" >vector2.x - vector1.x;</span>
958
+ <span class="cstat-no" title="statement not covered" > return ySeparation * ySeparation + xSeparation * xSeparation;</span>
959
+ }
960
+ &nbsp;
961
+ /**
962
+ * The sign function determines the sign of the cross product between two 2D vectors.
963
+ * (assuming the Y axis is pointing down, X axis to right like a Window app)
964
+ * @param {Vector2D} vector1 - The parameter `vector1` is of type `Vector2D`, which represents a 2-dimensional vector.
965
+ * It likely has properties `x` and `y` representing the x and y components of the vector, respectively.
966
+ * @param {Vector2D} vector2 - The above code defines a function called "sign" that takes two parameters: vector1 and
967
+ * vector2. Both vector1 and vector2 are of type Vector2D.
968
+ * @returns either -1 or 1. Returns positive if v2 is clockwise of this vector, negative if counterclockwise
969
+ */
970
+ <span class="fstat-no" title="function not covered" > static </span>sign(vector1: Vector2D, vector2: Vector2D): number {
971
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (vector1.y * vector2.x &gt; vector1.x * vector2.y) {</span>
972
+ <span class="cstat-no" title="statement not covered" > return -1;</span>
973
+ }
974
+ &nbsp;
975
+ <span class="cstat-no" title="statement not covered" > return 1;</span>
976
+ }
977
+ &nbsp;
978
+ /**
979
+ * The function calculates the angle between a given vector and the negative y-axis.
980
+ * @param {Vector2D} vector - The "vector" parameter is an instance of the Vector2D class, which represents a
981
+ * 2-dimensional vector. It has two properties: "x" and "y", which represent the x and y components of the vector,
982
+ * respectively.
983
+ * @returns the angle between the given vector and the vector (0, -1) in radians.Returns the angle between origin and the given vector in radians
984
+ */
985
+ <span class="fstat-no" title="function not covered" > static </span>angle(vector: Vector2D): number {
986
+ const origin = <span class="cstat-no" title="statement not covered" >new Vector2D(0, -1);</span>
987
+ const radian = <span class="cstat-no" title="statement not covered" >Math.acos(Vector2D.dot(vector, origin) / (vector.length * origin.length));</span>
988
+ <span class="cstat-no" title="statement not covered" > return Vector2D.sign(vector, origin) === 1 ? Math.PI * 2 - radian : radian;</span>
989
+ }
990
+ &nbsp;
991
+ /**
992
+ * The function "random" generates a random Vector2D object with x and y values within the specified range.
993
+ * @param {number} maxX - The maxX parameter represents the maximum value for the x-coordinate of the random vector.
994
+ * @param {number} maxY - The `maxY` parameter represents the maximum value for the y-coordinate of the generated
995
+ * random vector.
996
+ * @returns a new instance of the Vector2D class with random x and y values.
997
+ */
998
+ <span class="fstat-no" title="function not covered" > static </span>random(maxX: number, maxY: number): Vector2D {
999
+ const randX = <span class="cstat-no" title="statement not covered" >Math.floor(Math.random() * maxX - maxX / 2);</span>
1000
+ const randY = <span class="cstat-no" title="statement not covered" >Math.floor(Math.random() * maxY - maxY / 2);</span>
1001
+ <span class="cstat-no" title="statement not covered" > return new Vector2D(randX, randY);</span>
1002
+ }
1003
+ &nbsp;
1004
+ /**
1005
+ * The function sets the values of x and y to zero.
1006
+ */
1007
+ <span class="fstat-no" title="function not covered" > zero(</span>): void {
1008
+ <span class="cstat-no" title="statement not covered" > this.x = 0;</span>
1009
+ <span class="cstat-no" title="statement not covered" > this.y = 0;</span>
1010
+ }
1011
+ }
1012
+ &nbsp;
1013
+ export default Vector2D;
1014
+ &nbsp;</pre></td></tr></table></pre>
1015
+
1016
+ <div class='push'></div><!-- for sticky footer -->
1017
+ </div><!-- /wrapper -->
1018
+ <div class='footer quiet pad2 space-top1 center small'>
1019
+ Code coverage generated by
1020
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1021
+ at 2023-09-21T16:58:55.114Z
1022
+ </div>
1023
+ <script src="../../../prettify.js"></script>
1024
+ <script>
1025
+ window.onload = function () {
1026
+ prettyPrint();
1027
+ };
1028
+ </script>
1029
+ <script src="../../../sorter.js"></script>
1030
+ <script src="../../../block-navigation.js"></script>
1031
+ </body>
1032
+ </html>
1033
+