MatrixDeterminantTest.php 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458
  1. <?php
  2. namespace MathPHP\Tests\LinearAlgebra\Matrix\Numeric;
  3. use MathPHP\LinearAlgebra\MatrixFactory;
  4. use MathPHP\Exception;
  5. class MatrixDeterminantTest extends \PHPUnit\Framework\TestCase
  6. {
  7. use \MathPHP\Tests\LinearAlgebra\Fixture\MatrixDataProvider;
  8. /**
  9. * @test det
  10. * @dataProvider dataProviderForDet
  11. */
  12. public function testDet(array $A, $expected)
  13. {
  14. // Given
  15. $A = MatrixFactory::create($A);
  16. // When
  17. $det = $A->det();
  18. // Then
  19. $this->assertEqualsWithDelta($expected, $det, 0.000001);
  20. }
  21. /**
  22. * @return array (A, det)
  23. */
  24. public function dataProviderForDet(): array
  25. {
  26. return [
  27. [
  28. [[1]], 1
  29. ],
  30. [
  31. [
  32. [0]
  33. ],
  34. 0
  35. ],
  36. [
  37. [
  38. [1]
  39. ],
  40. 1
  41. ],
  42. [
  43. [
  44. [2]
  45. ],
  46. 2
  47. ],
  48. [
  49. [
  50. [5]
  51. ],
  52. 5
  53. ],
  54. [
  55. [
  56. [-5]
  57. ],
  58. -5
  59. ],
  60. [
  61. [
  62. [0, 0],
  63. [0, 0],
  64. ], 0
  65. ],
  66. [
  67. [
  68. [0, 0],
  69. [0, 1],
  70. ], 0
  71. ],
  72. [
  73. [
  74. [0, 0],
  75. [1, 0],
  76. ], 0
  77. ],
  78. [
  79. [
  80. [0, 0],
  81. [1, 1],
  82. ], 0
  83. ],
  84. [
  85. [
  86. [0, 1],
  87. [0, 0],
  88. ], 0
  89. ],
  90. [
  91. [
  92. [0, 1],
  93. [0, 1],
  94. ], 0
  95. ],
  96. [
  97. [
  98. [1, 0],
  99. [0, 0],
  100. ], 0
  101. ],
  102. [
  103. [
  104. [1, 0],
  105. [1, 0],
  106. ], 0
  107. ],
  108. [
  109. [
  110. [1, 1],
  111. [0, 0],
  112. ], 0
  113. ],
  114. [
  115. [
  116. [1, 1],
  117. [1, 1],
  118. ], 0
  119. ],
  120. [
  121. [
  122. [0, 1],
  123. [1, 0],
  124. ], -1
  125. ],
  126. [
  127. [
  128. [0, 1],
  129. [1, 1],
  130. ], -1
  131. ],
  132. [
  133. [
  134. [1, 0],
  135. [0, 1],
  136. ], 1
  137. ],
  138. [
  139. [
  140. [1, 0],
  141. [1, 1],
  142. ], 1
  143. ],
  144. [
  145. [
  146. [1, 1],
  147. [0, 1],
  148. ], 1
  149. ],
  150. [
  151. [
  152. [1, 1],
  153. [1, 0],
  154. ], -1
  155. ],
  156. [
  157. [
  158. [3, 8],
  159. [4, 6],
  160. ], -14
  161. ],
  162. [
  163. [
  164. [4, 3],
  165. [3, 2],
  166. ], -1
  167. ],
  168. [
  169. [
  170. [1, 2],
  171. [3, 4],
  172. ], -2
  173. ],
  174. [
  175. [
  176. [1, 2],
  177. [3, 4],
  178. ], -2
  179. ],
  180. [
  181. [
  182. [1, 2],
  183. [2, 1],
  184. ], -3
  185. ],
  186. [
  187. [
  188. [1, 3],
  189. [3, 1],
  190. ], -8
  191. ],
  192. [
  193. [
  194. [6, 1, 1],
  195. [4, -2, 5],
  196. [2, 8, 7],
  197. ], -306
  198. ],
  199. [
  200. [
  201. [1, 2, 0],
  202. [-1, 1, 1],
  203. [1, 2, 3],
  204. ], 9
  205. ],
  206. [
  207. [
  208. [1, 2, 3],
  209. [2, 3, 4],
  210. [3, 4, 5],
  211. ], 0
  212. ],
  213. [
  214. [
  215. [1, 2, 1],
  216. [-2, -3, 1],
  217. [3, 5, 0],
  218. ], 0
  219. ],
  220. [
  221. [
  222. [1, -1, 2],
  223. [2, 1, 1],
  224. [1, 1, 0],
  225. ], 0
  226. ],
  227. [
  228. [
  229. [1, 0, 1],
  230. [0, 1, -1],
  231. [0, 0, 0],
  232. ], 0
  233. ],
  234. [
  235. [
  236. [1, 1, 4, 1, 2],
  237. [0, 1, 2, 1, 1],
  238. [0, 0, 0, 1, 2],
  239. [1, -1, 0, 0, 2],
  240. [2, 1, 6, 0, 1],
  241. ], 0
  242. ],
  243. [
  244. [
  245. [4, 6, 3, 2],
  246. [3, 6, 5, 3],
  247. [5, 7, 8, 6],
  248. [5, 4, 3, 2],
  249. ], -43
  250. ],
  251. [
  252. [
  253. [3, 2, 0, 1],
  254. [4, 0, 1, 2],
  255. [3, 0, 2, 1],
  256. [9, 2, 3, 1],
  257. ], 24
  258. ],
  259. [
  260. [
  261. [1, 2, 3, 4],
  262. [5, 6, 7, 8],
  263. [2, 6, 4, 8],
  264. [3, 1, 1, 2],
  265. ], 72
  266. ],
  267. [
  268. [
  269. [7, 4, 2, 0],
  270. [6, 3, -1, 2],
  271. [4, 6, 2, 5],
  272. [8, 2, -7, 1],
  273. ], -279
  274. ],
  275. [
  276. [
  277. [-4, 3, 1, 5, -8],
  278. [6, 0, 9, 2, 6],
  279. [-1, 4, 4, 0, 2],
  280. [8, -1, 3, 4, 0],
  281. [5, 9, -7, -7, 1]
  282. ],
  283. -5763
  284. ],
  285. [
  286. [
  287. [4, 3, 1, 5, -8],
  288. [6, 0, 9, 2, 6],
  289. [-1, 4, 4, 0, 2],
  290. [8, -1, 3, 4, 0],
  291. [5, 9, -7, -7, 1]
  292. ],
  293. -10035
  294. ],
  295. [
  296. [
  297. [4, 3, 1, 5, 8],
  298. [6, 0, 9, 2, 6],
  299. [-1, 4, 4, 0, 2],
  300. [8, -1, 3, 4, 0],
  301. [5, 9, -7, -7, 1]
  302. ],
  303. 32157
  304. ],
  305. [
  306. [
  307. [4, 3, 1, 5, 8],
  308. [6, 0, 9, 2, 6],
  309. [1, 4, 4, 0, 2],
  310. [8, -1, 3, 4, 0],
  311. [5, 9, -7, -7, 1]
  312. ],
  313. 28287
  314. ],
  315. [
  316. [
  317. [4, 3, 1, 5, 8],
  318. [6, 0, 9, 2, 6],
  319. [1, 4, 4, 0, 2],
  320. [8, 1, 3, 4, 0],
  321. [5, 9, -7, -7, 1]
  322. ],
  323. 30357
  324. ],
  325. [
  326. [
  327. [4, 3, 1, 5, 8],
  328. [6, 0, 9, 2, 6],
  329. [1, 4, 4, 0, 2],
  330. [8, 1, 3, 4, 0],
  331. [5, 9, 7, -7, 1]
  332. ],
  333. 17953
  334. ],
  335. [
  336. [
  337. [4, 3, 1, 5, 8],
  338. [6, 0, 9, 2, 6],
  339. [1, 4, 4, 0, 2],
  340. [8, 1, 3, 4, 0],
  341. [5, 9, 7, 7, 1]
  342. ],
  343. -11615
  344. ],
  345. [
  346. [
  347. [5, 2, 0, 0, -2],
  348. [0, 1, 4, 3, 2],
  349. [0, 0, 2, 6, 3],
  350. [0, 0, 3, 4, 1],
  351. [0, 0, 0, 0, 2],
  352. ],
  353. -100
  354. ],
  355. [
  356. [
  357. [5, 2, 0, 0, 2],
  358. [0, 1, 4, 3, 2],
  359. [0, 0, 2, 6, 3],
  360. [0, 0, 3, 4, 1],
  361. [0, 0, 0, 0, 2],
  362. ],
  363. -100
  364. ],
  365. [
  366. [
  367. [5, 2, 0, 0, -2],
  368. [0, -1, 4, 3, 2],
  369. [0, 0, 2, 6, 3],
  370. [0, 0, 3, 4, 1],
  371. [0, 0, 0, 0, 2],
  372. ],
  373. 100
  374. ],
  375. [
  376. [
  377. [2, -9, 1, 8, 4],
  378. [-10, -1, 2, 7, 0],
  379. [0, 4, -6, 1, -8],
  380. [6, -14, 11, 0, 3],
  381. [5, 1, -3, 2, -1],
  382. ],
  383. 30143
  384. ],
  385. [
  386. [
  387. [2, 9, 1, 8, 4],
  388. [-10, -1, 2, 7, 0],
  389. [0, 4, -6, 1, -8],
  390. [6, -14, 11, 0, 3],
  391. [5, 1, -3, 2, -1],
  392. ],
  393. -55105
  394. ],
  395. [
  396. [
  397. [2, 9, 1, 8, 4],
  398. [10, -1, 2, 7, 0],
  399. [0, 4, -6, 1, -8],
  400. [6, -14, 11, 0, 3],
  401. [5, 1, -3, 2, -1],
  402. ],
  403. -5
  404. ],
  405. [
  406. [
  407. [2, 9, 1, 8, 4],
  408. [10, 1, 2, 7, 0],
  409. [0, 4, -6, 1, -8],
  410. [6, -14, 11, 0, 3],
  411. [5, 1, -3, 2, -1],
  412. ],
  413. 6929
  414. ],
  415. [
  416. [
  417. [276,1,179,23, 9387],
  418. [0, 0, 78, 0, 0],
  419. [0, 0, -1, 0, 1],
  420. [0, 0, 1994, -1, 1089],
  421. [1, 0, 212, 726, -378],
  422. ],
  423. 78
  424. ],
  425. [
  426. [
  427. [276,1,179,23, 9387],
  428. [0, 0, 78, 0, 0],
  429. [0, 0, 1, 0, 1],
  430. [0, 0, 1994, -1, 1089],
  431. [1, 0, 212, 726, -378],
  432. ],
  433. 78
  434. ],
  435. [
  436. [
  437. [276,1,179,23, 9387],
  438. [0, 0, 78, 0, 0],
  439. [0, 0, 1, 0, 1],
  440. [0, 0, 1994, 1, 1089],
  441. [1, 0, 212, 726, -378],
  442. ],
  443. -78
  444. ],
  445. [
  446. [
  447. [276,1,179,23, 9387],
  448. [0, 0, 78, 0, 0],
  449. [0, 0, 1, 0, 1],
  450. [0, 0, 1994, 1, 1089],
  451. [1, 0, 212, 726, 378],
  452. ],
  453. -78
  454. ],
  455. [
  456. [
  457. [276,1,179,23, -9387],
  458. [0, 0, 78, 0, 0],
  459. [0, 0, 1, 0, 1],
  460. [0, 0, 1994, 1, 1089],
  461. [1, 0, 212, 726, 378],
  462. ],
  463. -78
  464. ],
  465. [
  466. [
  467. [1, 2, 3, 4, 5],
  468. [2, 3, 4, 5, 6],
  469. [5, 4, 3, 2, 1],
  470. [4, 3, 2, 1, 0],
  471. [1, 3, 5, 7, 9],
  472. ],
  473. 0
  474. ],
  475. [
  476. [
  477. [1, 0, 3, 5, 1],
  478. [0, 1, 5, 1, 0],
  479. [0, 4, 0, 0, 2],
  480. [2, 3, 1, 2, 0],
  481. [1, 0, 0, 1, 1],
  482. ],
  483. 230
  484. ],
  485. [
  486. [
  487. [2, 3, 4, 1, 3],
  488. [6, 1, 3, 1, 2],
  489. [6, 3, 1, 2, 5],
  490. [4, 2, 4, 7, 8],
  491. [2, 1, 2, 4, 2],
  492. ],
  493. -1016
  494. ],
  495. [
  496. [
  497. [2, 3, -4, 1, 3],
  498. [6, 1, 3, 1, 2],
  499. [6, 3, 1, 2, 5],
  500. [4, 2, 4, 7, 8],
  501. [2, 1, 2, 4, 2],
  502. ],
  503. 296
  504. ],
  505. [
  506. [
  507. [2, 3, -4, 1, 3],
  508. [6, 1, -3, 1, 2],
  509. [6, 3, 1, 2, 5],
  510. [4, 2, 4, 7, 8],
  511. [2, 1, 2, 4, 2],
  512. ],
  513. 1280
  514. ],
  515. [
  516. [
  517. [2, 3, -4, 1, 3],
  518. [6, 1, -3, 1, 2],
  519. [6, 3, -1, 2, 5],
  520. [4, 2, 4, 7, 8],
  521. [2, 1, 2, 4, 2],
  522. ],
  523. 808
  524. ],
  525. [
  526. [
  527. [2, 3, -4, 1, 3],
  528. [6, 1, -3, 1, 2],
  529. [6, 3, -1, 2, 5],
  530. [4, 2, -4, 7, 8],
  531. [2, 1, 2, 4, 2],
  532. ],
  533. 1320
  534. ],
  535. [
  536. [
  537. [2, 3, -4, 1, 3],
  538. [6, 1, -3, 1, 2],
  539. [6, 3, -1, 2, 5],
  540. [4, 2, -4, 7, 8],
  541. [2, 1, -2, 4, 2],
  542. ],
  543. 1016
  544. ],
  545. [
  546. [
  547. [2, 3, -4, -1, 3],
  548. [6, 1, -3, 1, 2],
  549. [6, 3, -1, 2, 5],
  550. [4, 2, -4, 7, 8],
  551. [2, 1, -2, 4, 2],
  552. ],
  553. 1176
  554. ],
  555. [
  556. [
  557. [2, 3, -4, -1, -3],
  558. [6, 1, -3, -1, 2],
  559. [6, 3, -1, 2, 5],
  560. [4, 2, -4, 7, -8],
  561. [2, 1, -2, 4, 2],
  562. ],
  563. -3664
  564. ],
  565. [
  566. [
  567. [2, 1, 2],
  568. [1, 1, 1],
  569. [2, 2, 5],
  570. ],
  571. 3
  572. ],
  573. [
  574. [
  575. [1, 0, 2, -1],
  576. [3, 0, 0, 5],
  577. [2, 1, 4, -3],
  578. [1, 0, 5, 0],
  579. ],
  580. 30
  581. ],
  582. [
  583. [
  584. [1, 0, 2, 0, 0, 4],
  585. [18, 1, 5, 0, 0, 9],
  586. [3, 5, 3, 6, 0, 4],
  587. [2, 0, 8, 0, 0, 7],
  588. [7, 0, 4, 0, 6, 0],
  589. [0, 0, 1, 0, 0, 0]
  590. ],
  591. -36
  592. ],
  593. [
  594. [
  595. [-1, 0, 2, 0, 0, 4],
  596. [18, 1, 5, 0, 0, 9],
  597. [3, 5, 3, 6, 0, 4],
  598. [2, 0, 8, 0, 0, 7],
  599. [7, 0, 4, 0, 6, 0],
  600. [0, 0, 1, 0, 0, 0]
  601. ],
  602. -540
  603. ],
  604. [
  605. [
  606. [-1, 0, -2, 0, 0, 4],
  607. [18, 1, 5, 0, 0, 9],
  608. [3, 5, 3, 6, 0, 4],
  609. [2, 0, 8, 0, 0, 7],
  610. [7, 0, 4, 0, 6, 0],
  611. [0, 0, 1, 0, 0, 0]
  612. ],
  613. -540
  614. ],
  615. [
  616. [
  617. [-1, 0, -2, 0, 0, -4],
  618. [18, 1, 5, 0, 0, 9],
  619. [3, 5, 3, 6, 0, 4],
  620. [2, 0, 8, 0, 0, 7],
  621. [7, 0, 4, 0, 6, 0],
  622. [0, 0, 1, 0, 0, 0]
  623. ],
  624. 36
  625. ],
  626. [
  627. [
  628. [1, 1, 1, 1, 1, 1],
  629. [1, 3, 1, 3, 1, 3],
  630. [1, 1, 4, 1, 1, 4],
  631. [1, 3, 1, 7, 1, 3],
  632. [1, 1, 1, 1, 6, 1],
  633. [1, 3, 4, 3, 1, 12]
  634. ],
  635. 720
  636. ],
  637. [
  638. [
  639. [-1, 1, 1, 1, 1, 1],
  640. [1, 3, 1, 3, 1, 3],
  641. [1, 1, 4, 1, 1, 4],
  642. [1, 3, 1, 7, 1, 3],
  643. [1, 1, 1, 1, 6, 1],
  644. [1, 3, 4, 3, 1, 12]
  645. ],
  646. -2448
  647. ],
  648. [
  649. [
  650. [-1, 1, 1, 1, 1, 1],
  651. [1, 3, 1, 3, 1, 3],
  652. [1, 1, 4, 1, 1, 4],
  653. [1, -3, 1, 7, 1, 3],
  654. [1, 1, 1, 1, 6, 1],
  655. [1, 3, 4, 3, 1, 12]
  656. ],
  657. -6120
  658. ],
  659. [
  660. [
  661. [1, 0, 0, 0, 0, 0],
  662. [0, 2, 0, 0, 0, 0],
  663. [0, 0, 3, 0, 0, 0],
  664. [0, 0, 0, 4, 0, 0],
  665. [0, 0, 0, 0, 5, 0],
  666. [0, 0, 0, 0, 0, 6]
  667. ],
  668. 720
  669. ],
  670. [
  671. [
  672. [-1, 0, 0, 0, 0, 0],
  673. [0, 2, 0, 0, 0, 0],
  674. [0, 0, 3, 0, 0, 0],
  675. [0, 0, 0, 4, 0, 0],
  676. [0, 0, 0, 0, 5, 0],
  677. [0, 0, 0, 0, 0, 6]
  678. ],
  679. -720
  680. ],
  681. [
  682. [
  683. [-1, 0, 0, 0, 0, 0],
  684. [0, 2, 0, 0, 0, 0],
  685. [0, 0, 0, 4, 0, 0],
  686. [0, 0, 3, 0, 0, 0],
  687. [0, 0, 0, 0, 5, 0],
  688. [0, 0, 0, 0, 0, 6]
  689. ],
  690. 720
  691. ],
  692. [
  693. [
  694. [1, 0, 0, 0, 0, 0],
  695. [1, 2, 0, 0, 0, 0],
  696. [1, 0, 3, 0, 0, 0],
  697. [1, 2, 0, 4, 0, 0],
  698. [1, 0, 0, 0, 5, 0],
  699. [1, 2, 3, 0, 0, 6],
  700. ],
  701. 720
  702. ],
  703. [
  704. [
  705. [0, 1, 4, 3, 2, 3, 3, 4, 4],
  706. [1, 0, 3, 2, 1, 2, 2, 3, 3],
  707. [4, 3, 0, 1, 2, 3, 3, 4, 4],
  708. [3, 2, 1, 0, 1, 2, 2, 3, 3],
  709. [2, 1, 2, 1, 0, 1, 1, 2, 2],
  710. [3, 2, 3, 2, 1, 0, 2, 3, 3],
  711. [3, 2, 3, 2, 1, 2, 0, 1, 2],
  712. [4, 3, 4, 3, 2, 3, 1, 0, 2],
  713. [4, 3, 4, 3, 2, 3, 2, 2, 0],
  714. ],
  715. 1472
  716. ],
  717. [
  718. [
  719. [0, 1, 4, 3, 2, 3, 3, 4, 4],
  720. [-1, 0, 3, 2, 1, 2, 2, 3, 3],
  721. [4, 3, 0, 1, 2, 3, 3, 4, 4],
  722. [3, 2, 1, 0, 1, 2, 2, 3, 3],
  723. [2, 1, 2, 1, 0, 1, 1, 2, 2],
  724. [3, 2, 3, 2, 1, 0, 2, 3, 3],
  725. [3, 2, 3, 2, 1, 2, 0, 1, 2],
  726. [4, 3, 4, 3, 2, 3, 1, 0, 2],
  727. [4, 3, 4, 3, 2, 3, 2, 2, 0],
  728. ],
  729. 0
  730. ],
  731. [
  732. [
  733. [2, 1, 4, 3, 2, 3, 3, 4, 4],
  734. [1, 2, 3, 2, 1, 2, 2, 3, 3],
  735. [4, 3, 2, 1, 2, 3, 3, 4, 4],
  736. [3, 2, 1, 2, 1, 2, 2, 3, 3],
  737. [2, 1, 2, 1, 2, 1, 1, 2, 2],
  738. [3, 2, 3, 2, 1, 2, 2, 3, 3],
  739. [3, 2, 3, 2, 1, 2, 2, 1, 2],
  740. [4, 3, 4, 3, 2, 3, 1, 2, 2],
  741. [4, 3, 4, 3, 2, 3, 2, 2, 2],
  742. ],
  743. 128
  744. ],
  745. [
  746. [
  747. [2, -1, 4, 3, 2, 3, 3, 4, 4],
  748. [1, 2, 3, 2, 1, 2, 2, 3, 3],
  749. [4, 3, 2, 1, 2, 3, 3, 4, 4],
  750. [3, 2, 1, 2, 1, 2, 2, 3, 3],
  751. [2, 1, 2, 1, 2, 1, 1, 2, 2],
  752. [3, 2, 3, 2, 1, 2, 2, 3, 3],
  753. [3, 2, 3, 2, 1, 2, 2, 1, 2],
  754. [4, 3, 4, 3, 2, 3, 1, 2, 2],
  755. [4, 3, 4, 3, 2, 3, 2, 2, 2],
  756. ],
  757. 256
  758. ],
  759. [
  760. [
  761. [2, 1, 4, 3, 2, 3, 3, 4, 4],
  762. [-1, 2, 3, 2, 1, 2, 2, 3, 3],
  763. [4, 3, 2, 1, 2, 3, 3, 4, 4],
  764. [3, 2, 1, 2, 1, 2, 2, 3, 3],
  765. [2, 1, 2, 1, 2, 1, 1, 2, 2],
  766. [3, 2, 3, 2, 1, 2, 2, 3, 3],
  767. [3, 2, 3, 2, 1, 2, 2, 1, 2],
  768. [4, 3, 4, 3, 2, 3, 1, 2, 2],
  769. [4, 3, 4, 3, 2, 3, 2, 2, 2],
  770. ],
  771. 256
  772. ],
  773. [
  774. [
  775. [2, -1, 4, 3, 2, 3, 3, 4, 4],
  776. [-1, 2, 3, 2, 1, 2, 2, 3, 3],
  777. [4, 3, 2, 1, 2, 3, 3, 4, 4],
  778. [3, 2, 1, 2, 1, 2, 2, 3, 3],
  779. [2, 1, 2, 1, 2, 1, 1, 2, 2],
  780. [3, 2, 3, 2, 1, 2, 2, 3, 3],
  781. [3, 2, 3, 2, 1, 2, 2, 1, 2],
  782. [4, 3, 4, 3, 2, 3, 1, 2, 2],
  783. [4, 3, 4, 3, 2, 3, 2, 2, 2],
  784. ],
  785. 512
  786. ],
  787. [
  788. [
  789. [2, -1, 4, 3, 2, 3, 3, 4, 4],
  790. [-1, 2, 3, 2, 1, 2, 2, 3, 3],
  791. [4, 3, 2, 1, 2, 3, 3, 4, 4],
  792. [2, 1, 2, 1, 2, 1, 1, 2, 2],
  793. [3, 2, 1, 2, 1, 2, 2, 3, 3],
  794. [3, 2, 3, 2, 1, 2, 2, 3, 3],
  795. [3, 2, 3, 2, 1, 2, 2, 1, 2],
  796. [4, 3, 4, 3, 2, 3, 1, 2, 2],
  797. [4, 3, 4, 3, 2, 3, 2, 2, 2],
  798. ],
  799. -512
  800. ],
  801. [
  802. [
  803. [2, -1, 4, 3, 2, 3, 4, 4],
  804. [-1, 2, 3, 2, 1, 2, 3, 3],
  805. [4, 3, 2, 1, 2, 3, 4, 4],
  806. [2, 1, 2, 1, 2, 1, 2, 2],
  807. [3, 2, 3, 2, 1, 2, 3, 3],
  808. [3, 2, 3, 2, 1, 2, 1, 2],
  809. [4, 3, 4, 3, 2, 1, 2, 2],
  810. [4, 3, 4, 3, 2, 2, 2, 2],
  811. ],
  812. -96,
  813. ],
  814. [
  815. [
  816. [0, 3, 2, 1, 2, 2, 3, 3],
  817. [3, 0, 1, 2, 3, 3, 4, 4],
  818. [2, 1, 0, 1, 2, 2, 3, 3],
  819. [1, 2, 1, 0, 1, 1, 2, 2],
  820. [2, 3, 2, 1, 0, 2, 3, 3],
  821. [2, 3, 2, 1, 2, 0, 1, 2],
  822. [3, 4, 3, 2, 3, 1, 0, 2],
  823. [3, 4, 3, 2, 3, 2, 2, 0],
  824. ],
  825. -640
  826. ],
  827. [
  828. [
  829. [1, 3, 2, 1, 2, 2, 3, 3],
  830. [4, 0, 1, 2, 3, 3, 4, 4],
  831. [3, 1, 0, 1, 2, 2, 3, 3],
  832. [2, 2, 1, 0, 1, 1, 2, 2],
  833. [3, 3, 2, 1, 0, 2, 3, 3],
  834. [3, 3, 2, 1, 2, 0, 1, 2],
  835. [4, 4, 3, 2, 3, 1, 0, 2],
  836. [4, 4, 3, 2, 3, 2, 2, 0],
  837. ],
  838. -736
  839. ],
  840. [
  841. [
  842. [1, 4, 3, 2, 3, 3, 4, 4],
  843. [0, 3, 2, 1, 2, 2, 3, 3],
  844. [2, 1, 0, 1, 2, 2, 3, 3],
  845. [1, 2, 1, 0, 1, 1, 2, 2],
  846. [2, 3, 2, 1, 0, 2, 3, 3],
  847. [2, 3, 2, 1, 2, 0, 1, 2],
  848. [3, 4, 3, 2, 3, 1, 0, 2],
  849. [3, 4, 3, 2, 3, 2, 2, 0],
  850. ],
  851. 96
  852. ],
  853. [
  854. [
  855. [1, 4, 3, 2, 3, 3, 4, 4],
  856. [0, 3, 2, 1, 2, 2, 3, 3],
  857. [3, 0, 1, 2, 3, 3, 4, 4],
  858. [1, 2, 1, 0, 1, 1, 2, 2],
  859. [2, 3, 2, 1, 0, 2, 3, 3],
  860. [2, 3, 2, 1, 2, 0, 1, 2],
  861. [3, 4, 3, 2, 3, 1, 0, 2],
  862. [3, 4, 3, 2, 3, 2, 2, 0],
  863. ],
  864. 0
  865. ],
  866. [
  867. [
  868. [1, 4, 3, 2, 3, 3, 4, 4],
  869. [0, 3, 2, 1, 2, 2, 3, 3],
  870. [3, 0, 1, 2, 3, 3, 4, 4],
  871. [2, 1, 0, 1, 2, 2, 3, 3],
  872. [2, 3, 2, 1, 0, 2, 3, 3],
  873. [2, 3, 2, 1, 2, 0, 1, 2],
  874. [3, 4, 3, 2, 3, 1, 0, 2],
  875. [3, 4, 3, 2, 3, 2, 2, 0],
  876. ],
  877. -224
  878. ],
  879. [
  880. [
  881. [1, 4, 3, 2, 3, 3, 4, 4],
  882. [0, 3, 2, 1, 2, 2, 3, 3],
  883. [3, 0, 1, 2, 3, 3, 4, 4],
  884. [2, 1, 0, 1, 2, 2, 3, 3],
  885. [1, 2, 1, 0, 1, 1, 2, 2],
  886. [2, 3, 2, 1, 2, 0, 1, 2],
  887. [3, 4, 3, 2, 3, 1, 0, 2],
  888. [3, 4, 3, 2, 3, 2, 2, 0],
  889. ],
  890. -96
  891. ],
  892. [
  893. [
  894. [1, 4, 3, 2, 3, 3, 4, 4],
  895. [0, 3, 2, 1, 2, 2, 3, 3],
  896. [3, 0, 1, 2, 3, 3, 4, 4],
  897. [2, 1, 0, 1, 2, 2, 3, 3],
  898. [1, 2, 1, 0, 1, 1, 2, 2],
  899. [2, 3, 2, 1, 0, 2, 3, 3],
  900. [3, 4, 3, 2, 3, 1, 0, 2],
  901. [3, 4, 3, 2, 3, 2, 2, 0],
  902. ],
  903. 0
  904. ],
  905. [
  906. [
  907. [1, 4, 3, 2, 3, 3, 4, 4],
  908. [0, 3, 2, 1, 2, 2, 3, 3],
  909. [3, 0, 1, 2, 3, 3, 4, 4],
  910. [2, 1, 0, 1, 2, 2, 3, 3],
  911. [1, 2, 1, 0, 1, 1, 2, 2],
  912. [2, 3, 2, 1, 0, 2, 3, 3],
  913. [2, 3, 2, 1, 2, 0, 1, 2],
  914. [3, 4, 3, 2, 3, 2, 2, 0],
  915. ],
  916. -64
  917. ],
  918. [
  919. [
  920. [1, 4, 3, 2, 3, 3, 4, 4],
  921. [0, 3, 2, 1, 2, 2, 3, 3],
  922. [3, 0, 1, 2, 3, 3, 4, 4],
  923. [2, 1, 0, 1, 2, 2, 3, 3],
  924. [1, 2, 1, 0, 1, 1, 2, 2],
  925. [2, 3, 2, 1, 0, 2, 3, 3],
  926. [2, 3, 2, 1, 2, 0, 1, 2],
  927. [3, 4, 3, 2, 3, 1, 0, 2],
  928. ],
  929. 64
  930. ],
  931. [
  932. [
  933. [1, 3, 2, 1, 2, 2, 3, 3],
  934. [4, 0, 1, 2, 3, 3, 4, 4],
  935. [3, 1, 0, 1, 2, 2, 3, 3],
  936. [2, 2, 1, 0, 1, 1, 2, 2],
  937. [3, 3, 2, 1, 0, 2, 3, 3],
  938. [3, 3, 2, 1, 2, 0, 1, 2],
  939. [4, 4, 3, 2, 3, 1, 0, 2],
  940. [4, 4, 3, 2, 3, 2, 2, 0],
  941. ],
  942. -736
  943. ],
  944. [
  945. [
  946. [0, 4, 3, 2, 3, 3, 4, 4],
  947. [4, 0, 1, 2, 3, 3, 4, 4],
  948. [3, 1, 0, 1, 2, 2, 3, 3],
  949. [2, 2, 1, 0, 1, 1, 2, 2],
  950. [3, 3, 2, 1, 0, 2, 3, 3],
  951. [3, 3, 2, 1, 2, 0, 1, 2],
  952. [4, 4, 3, 2, 3, 1, 0, 2],
  953. [4, 4, 3, 2, 3, 2, 2, 0],
  954. ],
  955. -1472
  956. ],
  957. [
  958. [
  959. [0, 4, 3, 2, 3, 3, 4, 4],
  960. [1, 3, 2, 1, 2, 2, 3, 3],
  961. [3, 1, 0, 1, 2, 2, 3, 3],
  962. [2, 2, 1, 0, 1, 1, 2, 2],
  963. [3, 3, 2, 1, 0, 2, 3, 3],
  964. [3, 3, 2, 1, 2, 0, 1, 2],
  965. [4, 4, 3, 2, 3, 1, 0, 2],
  966. [4, 4, 3, 2, 3, 2, 2, 0],
  967. ],
  968. 0
  969. ],
  970. [
  971. [
  972. [0, 4, 3, 2, 3, 3, 4, 4],
  973. [1, 3, 2, 1, 2, 2, 3, 3],
  974. [4, 0, 1, 2, 3, 3, 4, 4],
  975. [2, 2, 1, 0, 1, 1, 2, 2],
  976. [3, 3, 2, 1, 0, 2, 3, 3],
  977. [3, 3, 2, 1, 2, 0, 1, 2],
  978. [4, 4, 3, 2, 3, 1, 0, 2],
  979. [4, 4, 3, 2, 3, 2, 2, 0],
  980. ],
  981. 0
  982. ],
  983. [
  984. [
  985. [0, 4, 3, 2, 3, 3, 4, 4],
  986. [1, 3, 2, 1, 2, 2, 3, 3],
  987. [4, 0, 1, 2, 3, 3, 4, 4],
  988. [3, 1, 0, 1, 2, 2, 3, 3],
  989. [3, 3, 2, 1, 0, 2, 3, 3],
  990. [3, 3, 2, 1, 2, 0, 1, 2],
  991. [4, 4, 3, 2, 3, 1, 0, 2],
  992. [4, 4, 3, 2, 3, 2, 2, 0],
  993. ],
  994. -736
  995. ],
  996. [
  997. [
  998. [0, 4, 3, 2, 3, 3, 4, 4],
  999. [1, 3, 2, 1, 2, 2, 3, 3],
  1000. [4, 0, 1, 2, 3, 3, 4, 4],
  1001. [3, 1, 0, 1, 2, 2, 3, 3],
  1002. [2, 2, 1, 0, 1, 1, 2, 2],
  1003. [3, 3, 2, 1, 2, 0, 1, 2],
  1004. [4, 4, 3, 2, 3, 1, 0, 2],
  1005. [4, 4, 3, 2, 3, 2, 2, 0],
  1006. ],
  1007. 0
  1008. ],
  1009. [
  1010. [
  1011. [0, 4, 3, 2, 3, 3, 4, 4],
  1012. [1, 3, 2, 1, 2, 2, 3, 3],
  1013. [4, 0, 1, 2, 3, 3, 4, 4],
  1014. [3, 1, 0, 1, 2, 2, 3, 3],
  1015. [2, 2, 1, 0, 1, 1, 2, 2],
  1016. [3, 3, 2, 1, 0, 2, 3, 3],
  1017. [4, 4, 3, 2, 3, 1, 0, 2],
  1018. [4, 4, 3, 2, 3, 2, 2, 0],
  1019. ],
  1020. 0
  1021. ],
  1022. [
  1023. [
  1024. [0, 4, 3, 2, 3, 3, 4, 4],
  1025. [1, 3, 2, 1, 2, 2, 3, 3],
  1026. [4, 0, 1, 2, 3, 3, 4, 4],
  1027. [3, 1, 0, 1, 2, 2, 3, 3],
  1028. [2, 2, 1, 0, 1, 1, 2, 2],
  1029. [3, 3, 2, 1, 0, 2, 3, 3],
  1030. [3, 3, 2, 1, 2, 0, 1, 2],
  1031. [4, 4, 3, 2, 3, 2, 2, 0],
  1032. ],
  1033. 0
  1034. ],
  1035. [
  1036. [
  1037. [0, 4, 3, 2, 3, 3, 4, 4],
  1038. [1, 3, 2, 1, 2, 2, 3, 3],
  1039. [4, 0, 1, 2, 3, 3, 4, 4],
  1040. [3, 1, 0, 1, 2, 2, 3, 3],
  1041. [2, 2, 1, 0, 1, 1, 2, 2],
  1042. [3, 3, 2, 1, 0, 2, 3, 3],
  1043. [3, 3, 2, 1, 2, 0, 1, 2],
  1044. [4, 4, 3, 2, 3, 1, 0, 2],
  1045. ],
  1046. 0
  1047. ],
  1048. [
  1049. [
  1050. [1, 0, 2, 1, 2, 2, 3, 3],
  1051. [4, 3, 1, 2, 3, 3, 4, 4],
  1052. [3, 2, 0, 1, 2, 2, 3, 3],
  1053. [2, 1, 1, 0, 1, 1, 2, 2],
  1054. [3, 2, 2, 1, 0, 2, 3, 3],
  1055. [3, 2, 2, 1, 2, 0, 1, 2],
  1056. [4, 3, 3, 2, 3, 1, 0, 2],
  1057. [4, 3, 3, 2, 3, 2, 2, 0],
  1058. ],
  1059. 96
  1060. ],
  1061. [
  1062. [
  1063. [0, 1, 3, 2, 3, 3, 4, 4],
  1064. [4, 3, 1, 2, 3, 3, 4, 4],
  1065. [3, 2, 0, 1, 2, 2, 3, 3],
  1066. [2, 1, 1, 0, 1, 1, 2, 2],
  1067. [3, 2, 2, 1, 0, 2, 3, 3],
  1068. [3, 2, 2, 1, 2, 0, 1, 2],
  1069. [4, 3, 3, 2, 3, 1, 0, 2],
  1070. [4, 3, 3, 2, 3, 2, 2, 0],
  1071. ],
  1072. 0
  1073. ],
  1074. [
  1075. [
  1076. [0, 1, 3, 2, 3, 3, 4, 4],
  1077. [1, 0, 2, 1, 2, 2, 3, 3],
  1078. [3, 2, 0, 1, 2, 2, 3, 3],
  1079. [2, 1, 1, 0, 1, 1, 2, 2],
  1080. [3, 2, 2, 1, 0, 2, 3, 3],
  1081. [3, 2, 2, 1, 2, 0, 1, 2],
  1082. [4, 3, 3, 2, 3, 1, 0, 2],
  1083. [4, 3, 3, 2, 3, 2, 2, 0],
  1084. ],
  1085. -640
  1086. ],
  1087. [
  1088. [
  1089. [0, 1, 3, 2, 3, 3, 4, 4],
  1090. [1, 0, 2, 1, 2, 2, 3, 3],
  1091. [4, 3, 1, 2, 3, 3, 4, 4],
  1092. [2, 1, 1, 0, 1, 1, 2, 2],
  1093. [3, 2, 2, 1, 0, 2, 3, 3],
  1094. [3, 2, 2, 1, 2, 0, 1, 2],
  1095. [4, 3, 3, 2, 3, 1, 0, 2],
  1096. [4, 3, 3, 2, 3, 2, 2, 0],
  1097. ],
  1098. -736
  1099. ],
  1100. [
  1101. [
  1102. [0, 1, 3, 2, 3, 3, 4, 4],
  1103. [1, 0, 2, 1, 2, 2, 3, 3],
  1104. [4, 3, 1, 2, 3, 3, 4, 4],
  1105. [3, 2, 0, 1, 2, 2, 3, 3],
  1106. [3, 2, 2, 1, 0, 2, 3, 3],
  1107. [3, 2, 2, 1, 2, 0, 1, 2],
  1108. [4, 3, 3, 2, 3, 1, 0, 2],
  1109. [4, 3, 3, 2, 3, 2, 2, 0],
  1110. ],
  1111. -224
  1112. ],
  1113. [
  1114. [
  1115. [0, 1, 3, 2, 3, 3, 4, 4],
  1116. [1, 0, 2, 1, 2, 2, 3, 3],
  1117. [4, 3, 1, 2, 3, 3, 4, 4],
  1118. [3, 2, 0, 1, 2, 2, 3, 3],
  1119. [2, 1, 1, 0, 1, 1, 2, 2],
  1120. [3, 2, 2, 1, 2, 0, 1, 2],
  1121. [4, 3, 3, 2, 3, 1, 0, 2],
  1122. [4, 3, 3, 2, 3, 2, 2, 0],
  1123. ],
  1124. -96
  1125. ],
  1126. [
  1127. [
  1128. [0, 1, 3, 2, 3, 3, 4, 4],
  1129. [1, 0, 2, 1, 2, 2, 3, 3],
  1130. [4, 3, 1, 2, 3, 3, 4, 4],
  1131. [3, 2, 0, 1, 2, 2, 3, 3],
  1132. [2, 1, 1, 0, 1, 1, 2, 2],
  1133. [3, 2, 2, 1, 0, 2, 3, 3],
  1134. [4, 3, 3, 2, 3, 1, 0, 2],
  1135. [4, 3, 3, 2, 3, 2, 2, 0],
  1136. ],
  1137. 0
  1138. ],
  1139. [
  1140. [
  1141. [0, 1, 3, 2, 3, 3, 4, 4],
  1142. [1, 0, 2, 1, 2, 2, 3, 3],
  1143. [4, 3, 1, 2, 3, 3, 4, 4],
  1144. [3, 2, 0, 1, 2, 2, 3, 3],
  1145. [2, 1, 1, 0, 1, 1, 2, 2],
  1146. [3, 2, 2, 1, 0, 2, 3, 3],
  1147. [3, 2, 2, 1, 2, 0, 1, 2],
  1148. [4, 3, 3, 2, 3, 2, 2, 0],
  1149. ],
  1150. -64
  1151. ],
  1152. [
  1153. [
  1154. [0, 1, 3, 2, 3, 3, 4, 4],
  1155. [1, 0, 2, 1, 2, 2, 3, 3],
  1156. [4, 3, 1, 2, 3, 3, 4, 4],
  1157. [3, 2, 0, 1, 2, 2, 3, 3],
  1158. [2, 1, 1, 0, 1, 1, 2, 2],
  1159. [3, 2, 2, 1, 0, 2, 3, 3],
  1160. [3, 2, 2, 1, 2, 0, 1, 2],
  1161. [4, 3, 3, 2, 3, 1, 0, 2],
  1162. ],
  1163. 64
  1164. ],
  1165. [
  1166. [
  1167. [1, 0, 3, 1, 2, 2, 3, 3],
  1168. [4, 3, 0, 2, 3, 3, 4, 4],
  1169. [3, 2, 1, 1, 2, 2, 3, 3],
  1170. [2, 1, 2, 0, 1, 1, 2, 2],
  1171. [3, 2, 3, 1, 0, 2, 3, 3],
  1172. [3, 2, 3, 1, 2, 0, 1, 2],
  1173. [4, 3, 4, 2, 3, 1, 0, 2],
  1174. [4, 3, 4, 2, 3, 2, 2, 0],
  1175. ],
  1176. 0
  1177. ],
  1178. [
  1179. [
  1180. [0, 1, 4, 2, 3, 3, 4, 4],
  1181. [4, 3, 0, 2, 3, 3, 4, 4],
  1182. [3, 2, 1, 1, 2, 2, 3, 3],
  1183. [2, 1, 2, 0, 1, 1, 2, 2],
  1184. [3, 2, 3, 1, 0, 2, 3, 3],
  1185. [3, 2, 3, 1, 2, 0, 1, 2],
  1186. [4, 3, 4, 2, 3, 1, 0, 2],
  1187. [4, 3, 4, 2, 3, 2, 2, 0],
  1188. ],
  1189. 0
  1190. ],
  1191. [
  1192. [
  1193. [0, 1, 4, 2, 3, 3, 4, 4],
  1194. [1, 0, 3, 1, 2, 2, 3, 3],
  1195. [3, 2, 1, 1, 2, 2, 3, 3],
  1196. [2, 1, 2, 0, 1, 1, 2, 2],
  1197. [3, 2, 3, 1, 0, 2, 3, 3],
  1198. [3, 2, 3, 1, 2, 0, 1, 2],
  1199. [4, 3, 4, 2, 3, 1, 0, 2],
  1200. [4, 3, 4, 2, 3, 2, 2, 0],
  1201. ],
  1202. -736
  1203. ],
  1204. [
  1205. [
  1206. [0, 1, 4, 2, 3, 3, 4, 4],
  1207. [1, 0, 3, 1, 2, 2, 3, 3],
  1208. [4, 3, 0, 2, 3, 3, 4, 4],
  1209. [2, 1, 2, 0, 1, 1, 2, 2],
  1210. [3, 2, 3, 1, 0, 2, 3, 3],
  1211. [3, 2, 3, 1, 2, 0, 1, 2],
  1212. [4, 3, 4, 2, 3, 1, 0, 2],
  1213. [4, 3, 4, 2, 3, 2, 2, 0],
  1214. ],
  1215. -1472
  1216. ],
  1217. [
  1218. [
  1219. [0, 1, 4, 2, 3, 3, 4, 4],
  1220. [1, 0, 3, 1, 2, 2, 3, 3],
  1221. [4, 3, 0, 2, 3, 3, 4, 4],
  1222. [3, 2, 1, 1, 2, 2, 3, 3],
  1223. [3, 2, 3, 1, 0, 2, 3, 3],
  1224. [3, 2, 3, 1, 2, 0, 1, 2],
  1225. [4, 3, 4, 2, 3, 1, 0, 2],
  1226. [4, 3, 4, 2, 3, 2, 2, 0],
  1227. ],
  1228. -736
  1229. ],
  1230. // If zero-values are not handled properly the pivots will be incorrect in this example
  1231. [
  1232. [
  1233. [0, 1, 4, 2, 3, 3, 4, 4],
  1234. [1, 0, 3, 1, 2, 2, 3, 3],
  1235. [4, 3, 0, 2, 3, 3, 4, 4],
  1236. [3, 2, 1, 1, 2, 2, 3, 3],
  1237. [2, 1, 2, 0, 1, 1, 2, 2],
  1238. [3, 2, 3, 1, 2, 0, 1, 2],
  1239. [4, 3, 4, 2, 3, 1, 0, 2],
  1240. [4, 3, 4, 2, 3, 2, 2, 0],
  1241. ],
  1242. 0
  1243. ],
  1244. [
  1245. [
  1246. [0, 1, 4, 2, 3, 3, 4, 4],
  1247. [1, 0, 3, 1, 2, 2, 3, 3],
  1248. [4, 3, 0, 2, 3, 3, 4, 4],
  1249. [3, 2, 1, 1, 2, 2, 3, 3],
  1250. [2, 1, 2, 0, 1, 1, 2, 2],
  1251. [3, 2, 3, 1, 0, 2, 3, 3],
  1252. [4, 3, 4, 2, 3, 1, 0, 2],
  1253. [4, 3, 4, 2, 3, 2, 2, 0],
  1254. ],
  1255. 0
  1256. ],
  1257. [
  1258. [
  1259. [0, 1, 4, 2, 3, 3, 4, 4],
  1260. [1, 0, 3, 1, 2, 2, 3, 3],
  1261. [4, 3, 0, 2, 3, 3, 4, 4],
  1262. [3, 2, 1, 1, 2, 2, 3, 3],
  1263. [2, 1, 2, 0, 1, 1, 2, 2],
  1264. [3, 2, 3, 1, 0, 2, 3, 3],
  1265. [3, 2, 3, 1, 2, 0, 1, 2],
  1266. [4, 3, 4, 2, 3, 2, 2, 0],
  1267. ],
  1268. 0
  1269. ],
  1270. [
  1271. [
  1272. [0, 1, 4, 2, 3, 3, 4, 4],
  1273. [1, 0, 3, 1, 2, 2, 3, 3],
  1274. [4, 3, 0, 2, 3, 3, 4, 4],
  1275. [3, 2, 1, 1, 2, 2, 3, 3],
  1276. [2, 1, 2, 0, 1, 1, 2, 2],
  1277. [3, 2, 3, 1, 0, 2, 3, 3],
  1278. [3, 2, 3, 1, 2, 0, 1, 2],
  1279. [4, 3, 4, 2, 3, 1, 0, 2],
  1280. ],
  1281. 0
  1282. ],
  1283. [
  1284. [
  1285. [1, 0, 3, 2, 2, 2, 3, 3],
  1286. [4, 3, 0, 1, 3, 3, 4, 4],
  1287. [3, 2, 1, 0, 2, 2, 3, 3],
  1288. [2, 1, 2, 1, 1, 1, 2, 2],
  1289. [3, 2, 3, 2, 0, 2, 3, 3],
  1290. [3, 2, 3, 2, 2, 0, 1, 2],
  1291. [4, 3, 4, 3, 3, 1, 0, 2],
  1292. [4, 3, 4, 3, 3, 2, 2, 0],
  1293. ],
  1294. -224
  1295. ],
  1296. [
  1297. [
  1298. [0, 1, 4, 3, 3, 3, 4, 4],
  1299. [4, 3, 0, 1, 3, 3, 4, 4],
  1300. [3, 2, 1, 0, 2, 2, 3, 3],
  1301. [2, 1, 2, 1, 1, 1, 2, 2],
  1302. [3, 2, 3, 2, 0, 2, 3, 3],
  1303. [3, 2, 3, 2, 2, 0, 1, 2],
  1304. [4, 3, 4, 3, 3, 1, 0, 2],
  1305. [4, 3, 4, 3, 3, 2, 2, 0],
  1306. ],
  1307. -736
  1308. ],
  1309. [
  1310. [
  1311. [0, 1, 4, 3, 3, 3, 4, 4],
  1312. [1, 0, 3, 2, 2, 2, 3, 3],
  1313. [3, 2, 1, 0, 2, 2, 3, 3],
  1314. [2, 1, 2, 1, 1, 1, 2, 2],
  1315. [3, 2, 3, 2, 0, 2, 3, 3],
  1316. [3, 2, 3, 2, 2, 0, 1, 2],
  1317. [4, 3, 4, 3, 3, 1, 0, 2],
  1318. [4, 3, 4, 3, 3, 2, 2, 0],
  1319. ],
  1320. -224
  1321. ],
  1322. [
  1323. [
  1324. [0, 1, 4, 3, 3, 3, 4, 4],
  1325. [1, 0, 3, 2, 2, 2, 3, 3],
  1326. [4, 3, 0, 1, 3, 3, 4, 4],
  1327. [2, 1, 2, 1, 1, 1, 2, 2],
  1328. [3, 2, 3, 2, 0, 2, 3, 3],
  1329. [3, 2, 3, 2, 2, 0, 1, 2],
  1330. [4, 3, 4, 3, 3, 1, 0, 2],
  1331. [4, 3, 4, 3, 3, 2, 2, 0],
  1332. ],
  1333. -736
  1334. ],
  1335. [
  1336. [
  1337. [0, 1, 4, 3, 3, 3, 4, 4],
  1338. [1, 0, 3, 2, 2, 2, 3, 3],
  1339. [4, 3, 0, 1, 3, 3, 4, 4],
  1340. [3, 2, 1, 0, 2, 2, 3, 3],
  1341. [3, 2, 3, 2, 0, 2, 3, 3],
  1342. [3, 2, 3, 2, 2, 0, 1, 2],
  1343. [4, 3, 4, 3, 3, 1, 0, 2],
  1344. [4, 3, 4, 3, 3, 2, 2, 0],
  1345. ],
  1346. -2544
  1347. ],
  1348. [
  1349. [
  1350. [0, 1, 4, 3, 3, 3, 4, 4],
  1351. [1, 0, 3, 2, 2, 2, 3, 3],
  1352. [4, 3, 0, 1, 3, 3, 4, 4],
  1353. [3, 2, 1, 0, 2, 2, 3, 3],
  1354. [2, 1, 2, 1, 1, 1, 2, 2],
  1355. [3, 2, 3, 2, 2, 0, 1, 2],
  1356. [4, 3, 4, 3, 3, 1, 0, 2],
  1357. [4, 3, 4, 3, 3, 2, 2, 0],
  1358. ],
  1359. -512
  1360. ],
  1361. [
  1362. [
  1363. [0, 1, 4, 3, 3, 3, 4, 4],
  1364. [1, 0, 3, 2, 2, 2, 3, 3],
  1365. [4, 3, 0, 1, 3, 3, 4, 4],
  1366. [3, 2, 1, 0, 2, 2, 3, 3],
  1367. [2, 1, 2, 1, 1, 1, 2, 2],
  1368. [3, 2, 3, 2, 0, 2, 3, 3],
  1369. [4, 3, 4, 3, 3, 1, 0, 2],
  1370. [4, 3, 4, 3, 3, 2, 2, 0],
  1371. ],
  1372. 736
  1373. ],
  1374. [
  1375. [
  1376. [0, 1, 4, 3, 3, 3, 4, 4],
  1377. [1, 0, 3, 2, 2, 2, 3, 3],
  1378. [4, 3, 0, 1, 3, 3, 4, 4],
  1379. [3, 2, 1, 0, 2, 2, 3, 3],
  1380. [2, 1, 2, 1, 1, 1, 2, 2],
  1381. [3, 2, 3, 2, 0, 2, 3, 3],
  1382. [3, 2, 3, 2, 2, 0, 1, 2],
  1383. [4, 3, 4, 3, 3, 2, 2, 0],
  1384. ],
  1385. 272
  1386. ],
  1387. [
  1388. [
  1389. [0, 1, 4, 3, 3, 3, 4, 4],
  1390. [1, 0, 3, 2, 2, 2, 3, 3],
  1391. [4, 3, 0, 1, 3, 3, 4, 4],
  1392. [3, 2, 1, 0, 2, 2, 3, 3],
  1393. [2, 1, 2, 1, 1, 1, 2, 2],
  1394. [3, 2, 3, 2, 0, 2, 3, 3],
  1395. [3, 2, 3, 2, 2, 0, 1, 2],
  1396. [4, 3, 4, 3, 3, 1, 0, 2],
  1397. ],
  1398. 96
  1399. ],
  1400. ];
  1401. }
  1402. /**
  1403. * @test det exception - not square
  1404. */
  1405. public function testDetExceptionNotSquareMatrix()
  1406. {
  1407. // Given
  1408. $A = MatrixFactory::create([[1, 2, 3]]);
  1409. // Then
  1410. $this->expectException(Exception\MatrixException::class);
  1411. // When
  1412. $A->det();
  1413. }
  1414. /**
  1415. * @test det
  1416. * @dataProvider dataProviderForSingularMatrix
  1417. * @param array $A
  1418. */
  1419. public function testDetOfSingularMatrixIsZero(array $A)
  1420. {
  1421. // Given
  1422. $A = MatrixFactory::create($A);
  1423. // When
  1424. $det = $A->det();
  1425. // Then
  1426. $this->assertEqualsWithDelta(0, $det, 0.000001);
  1427. }
  1428. /**
  1429. * @test det
  1430. * @dataProvider dataProviderForNonSingularMatrix
  1431. * @param array $A
  1432. */
  1433. public function testDetOfNonSingularMatrixIsNonZero(array $A)
  1434. {
  1435. // Given
  1436. $A = MatrixFactory::create($A);
  1437. // When
  1438. $det = $A->det();
  1439. // Then
  1440. $this->assertNotEqualsWithDelta(0, $det, 0.000001, '');
  1441. }
  1442. }