package Ġcom . daniel ger ge ly . cg math Ċ Ċ import Ġcom . daniel ger ge ly . cg math . mat 3 . Mat 3 Ċ import Ġcom . daniel ger ge ly . cg math . mat 3 . times Ċ import Ġcom . daniel ger ge ly . cg math . mat 3 . times Assign Ċ import Ġcom . daniel ger ge ly . cg math . vec 2 . Vec 2 Ċ import Ġcom . daniel ger ge ly . cg math . vec 3 . Vec 3 Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠMat 3 Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmat 3 Multiply () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm 1 Ġ= ĠMat 3 . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ 2 f , Ġ 3 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 f , Ġ 5 f , Ġ 6 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 f , Ġ 8 f , Ġ 9 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġm 2 Ġ= ĠMat 3 . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 f , Ġ 2 0 f , Ġ 3 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 f , Ġ 5 0 f , Ġ 6 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 0 f , Ġ 8 0 f , Ġ 9 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠMat 3 . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 0 0 f , Ġ 3 6 0 f , Ġ 4 2 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 6 0 f , Ġ 8 1 0 f , Ġ 9 6 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 2 0 f , Ġ 1 2 6 0 f , Ġ 1 5 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm 1 Ġ* Ġm 2 ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġresult Ġclose To Ġexpected Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmat 3 Self Multiply () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm 1 Ġ= ĠMat 3 . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ 2 f , Ġ 3 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 f , Ġ 5 f , Ġ 6 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 f , Ġ 8 f , Ġ 9 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġm 2 Ġ= ĠMat 3 . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 f , Ġ 2 0 f , Ġ 3 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 f , Ġ 5 0 f , Ġ 6 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 0 f , Ġ 8 0 f , Ġ 9 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠMat 3 . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 0 0 f , Ġ 3 6 0 f , Ġ 4 2 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 6 0 f , Ġ 8 1 0 f , Ġ 9 6 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 2 0 f , Ġ 1 2 6 0 f , Ġ 1 5 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġm 1 . times Assign ( m 2 ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġm 1 Ġclose To Ġexpected Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmat 3 Times Vec 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠMat 3 . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ 3 f , Ġ 6 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ 4 f , Ġ 7 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 f , Ġ 5 f , Ġ 8 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠVec 3 ( 1 1 f , Ġ 1 3 f , Ġ 1 7 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Ġ* Ġv ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠVec 3 ( 4 7 f , Ġ 1 7 0 f , 2 9 3 f Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġresult Ġclose To Ġexpected Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmat 3 Times Vec 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠMat 3 . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ 3 f , Ġ 6 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ 4 f , Ġ 7 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 f , Ġ 5 f , Ġ 8 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠVec 2 ( 1 1 f , Ġ 1 3 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Ġ* Ġv ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠVec 2 ( 1 5 f , Ġ 9 0 f ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġresult Ġclose To Ġexpected Ġ} ĊĠĠĠ Ġ} Ċ }