@@ -23,6 +23,7 @@ function assertApproxDeep(actual, expected, tolerance) {
23
23
describe ( 'DOMMatrix' , function ( ) {
24
24
var Avals = [ 4 , 5 , 1 , 8 , 0 , 3 , 6 , 1 , 3 , 5 , 0 , 9 , 2 , 4 , 6 , 1 ]
25
25
var Bvals = [ 1 , 5 , 1 , 0 , 0 , 3 , 6 , 1 , 3 , 5 , 7 , 2 , 2 , 0 , 6 , 1 ]
26
+ var Xvals = [ 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ]
26
27
var AxB = new Float64Array ( [ 7 , 25 , 31 , 22 , 20 , 43 , 24 , 58 , 37 , 73 , 45 , 94 , 28 , 44 , 8 , 71 ] )
27
28
var BxA = new Float64Array ( [ 23 , 40 , 89 , 15 , 20 , 39 , 66 , 16 , 21 , 30 , 87 , 14 , 22 , 52 , 74 , 17 ] )
28
29
@@ -374,7 +375,7 @@ describe('DOMMatrix', function () {
374
375
} )
375
376
376
377
describe ( 'skewYSelf' , function ( ) { } )
377
-
378
+
378
379
describe ( 'flipX' , function ( ) {
379
380
it ( 'works' , function ( ) {
380
381
var x = new DOMMatrix ( )
@@ -403,8 +404,127 @@ describe('DOMMatrix', function () {
403
404
} )
404
405
} )
405
406
406
- describe ( 'inverse' , function ( ) { } )
407
- describe ( 'invertSelf' , function ( ) { } )
407
+ describe ( 'invertSelf' , function ( ) {
408
+ it ( 'works for invertible matrices' , function ( ) {
409
+ var d = new DOMMatrix ( Avals )
410
+ d . invertSelf ( )
411
+ assertApprox ( d . m11 , 0.9152542372881356 )
412
+ assertApprox ( d . m12 , - 0.01694915254237288 )
413
+ assertApprox ( d . m13 , - 0.7966101694915254 )
414
+ assertApprox ( d . m14 , - 0.13559322033898305 )
415
+ assertApprox ( d . m21 , - 1.8305084745762712 )
416
+ assertApprox ( d . m22 , - 0.9661016949152542 )
417
+ assertApprox ( d . m23 , 1.5932203389830508 )
418
+ assertApprox ( d . m24 , 1.271186440677966 )
419
+ assertApprox ( d . m31 , 0.7966101694915254 )
420
+ assertApprox ( d . m32 , 0.559322033898305 )
421
+ assertApprox ( d . m33 , - 0.711864406779661 )
422
+ assertApprox ( d . m34 , - 0.5254237288135594 )
423
+ assertApprox ( d . m41 , 0.711864406779661 )
424
+ assertApprox ( d . m42 , 0.5423728813559322 )
425
+ assertApprox ( d . m43 , - 0.5084745762711864 )
426
+ assertApprox ( d . m44 , - 0.6610169491525424 )
427
+ } )
428
+
429
+ it ( 'works for non-invertible matrices' , function ( ) {
430
+ var d = new DOMMatrix ( Xvals )
431
+ d . invertSelf ( )
432
+ assert . strictEqual ( isNaN ( d . m11 ) , true )
433
+ assert . strictEqual ( isNaN ( d . m12 ) , true )
434
+ assert . strictEqual ( isNaN ( d . m13 ) , true )
435
+ assert . strictEqual ( isNaN ( d . m14 ) , true )
436
+ assert . strictEqual ( isNaN ( d . m21 ) , true )
437
+ assert . strictEqual ( isNaN ( d . m22 ) , true )
438
+ assert . strictEqual ( isNaN ( d . m23 ) , true )
439
+ assert . strictEqual ( isNaN ( d . m24 ) , true )
440
+ assert . strictEqual ( isNaN ( d . m31 ) , true )
441
+ assert . strictEqual ( isNaN ( d . m32 ) , true )
442
+ assert . strictEqual ( isNaN ( d . m33 ) , true )
443
+ assert . strictEqual ( isNaN ( d . m34 ) , true )
444
+ assert . strictEqual ( isNaN ( d . m41 ) , true )
445
+ assert . strictEqual ( isNaN ( d . m42 ) , true )
446
+ assert . strictEqual ( isNaN ( d . m43 ) , true )
447
+ assert . strictEqual ( isNaN ( d . m44 ) , true )
448
+ assert . strictEqual ( d . is2D , false )
449
+ } )
450
+ } )
451
+
452
+ describe ( 'inverse' , function ( ) {
453
+ it ( 'preserves the original DOMMatrix' , function ( ) {
454
+ var d = new DOMMatrix ( Avals )
455
+ var d2 = d . inverse ( )
456
+ assert . strictEqual ( d . m11 , Avals [ 0 ] )
457
+ assert . strictEqual ( d . m12 , Avals [ 1 ] )
458
+ assert . strictEqual ( d . m13 , Avals [ 2 ] )
459
+ assert . strictEqual ( d . m14 , Avals [ 3 ] )
460
+ assert . strictEqual ( d . m21 , Avals [ 4 ] )
461
+ assert . strictEqual ( d . m22 , Avals [ 5 ] )
462
+ assert . strictEqual ( d . m23 , Avals [ 6 ] )
463
+ assert . strictEqual ( d . m24 , Avals [ 7 ] )
464
+ assert . strictEqual ( d . m31 , Avals [ 8 ] )
465
+ assert . strictEqual ( d . m32 , Avals [ 9 ] )
466
+ assert . strictEqual ( d . m33 , Avals [ 10 ] )
467
+ assert . strictEqual ( d . m34 , Avals [ 11 ] )
468
+ assert . strictEqual ( d . m41 , Avals [ 12 ] )
469
+ assert . strictEqual ( d . m42 , Avals [ 13 ] )
470
+ assert . strictEqual ( d . m43 , Avals [ 14 ] )
471
+ assert . strictEqual ( d . m44 , Avals [ 15 ] )
472
+ assertApprox ( d2 . m11 , 0.9152542372881356 )
473
+ assertApprox ( d2 . m12 , - 0.01694915254237288 )
474
+ assertApprox ( d2 . m13 , - 0.7966101694915254 )
475
+ assertApprox ( d2 . m14 , - 0.13559322033898305 )
476
+ assertApprox ( d2 . m21 , - 1.8305084745762712 )
477
+ assertApprox ( d2 . m22 , - 0.9661016949152542 )
478
+ assertApprox ( d2 . m23 , 1.5932203389830508 )
479
+ assertApprox ( d2 . m24 , 1.271186440677966 )
480
+ assertApprox ( d2 . m31 , 0.7966101694915254 )
481
+ assertApprox ( d2 . m32 , 0.559322033898305 )
482
+ assertApprox ( d2 . m33 , - 0.711864406779661 )
483
+ assertApprox ( d2 . m34 , - 0.5254237288135594 )
484
+ assertApprox ( d2 . m41 , 0.711864406779661 )
485
+ assertApprox ( d2 . m42 , 0.5423728813559322 )
486
+ assertApprox ( d2 . m43 , - 0.5084745762711864 )
487
+ assertApprox ( d2 . m44 , - 0.6610169491525424 )
488
+ } )
489
+
490
+ it ( 'preserves the original DOMMatrix for non-invertible matrices' , function ( ) {
491
+ var d = new DOMMatrix ( Xvals )
492
+ var d2 = d . inverse ( )
493
+ assert . strictEqual ( d . m11 , Xvals [ 0 ] )
494
+ assert . strictEqual ( d . m12 , Xvals [ 1 ] )
495
+ assert . strictEqual ( d . m13 , Xvals [ 2 ] )
496
+ assert . strictEqual ( d . m14 , Xvals [ 3 ] )
497
+ assert . strictEqual ( d . m21 , Xvals [ 4 ] )
498
+ assert . strictEqual ( d . m22 , Xvals [ 5 ] )
499
+ assert . strictEqual ( d . m23 , Xvals [ 6 ] )
500
+ assert . strictEqual ( d . m24 , Xvals [ 7 ] )
501
+ assert . strictEqual ( d . m31 , Xvals [ 8 ] )
502
+ assert . strictEqual ( d . m32 , Xvals [ 9 ] )
503
+ assert . strictEqual ( d . m33 , Xvals [ 10 ] )
504
+ assert . strictEqual ( d . m34 , Xvals [ 11 ] )
505
+ assert . strictEqual ( d . m41 , Xvals [ 12 ] )
506
+ assert . strictEqual ( d . m42 , Xvals [ 13 ] )
507
+ assert . strictEqual ( d . m43 , Xvals [ 14 ] )
508
+ assert . strictEqual ( d . m44 , Xvals [ 15 ] )
509
+ assert . strictEqual ( isNaN ( d2 . m11 ) , true )
510
+ assert . strictEqual ( isNaN ( d2 . m12 ) , true )
511
+ assert . strictEqual ( isNaN ( d2 . m13 ) , true )
512
+ assert . strictEqual ( isNaN ( d2 . m14 ) , true )
513
+ assert . strictEqual ( isNaN ( d2 . m21 ) , true )
514
+ assert . strictEqual ( isNaN ( d2 . m22 ) , true )
515
+ assert . strictEqual ( isNaN ( d2 . m23 ) , true )
516
+ assert . strictEqual ( isNaN ( d2 . m24 ) , true )
517
+ assert . strictEqual ( isNaN ( d2 . m31 ) , true )
518
+ assert . strictEqual ( isNaN ( d2 . m32 ) , true )
519
+ assert . strictEqual ( isNaN ( d2 . m33 ) , true )
520
+ assert . strictEqual ( isNaN ( d2 . m34 ) , true )
521
+ assert . strictEqual ( isNaN ( d2 . m41 ) , true )
522
+ assert . strictEqual ( isNaN ( d2 . m42 ) , true )
523
+ assert . strictEqual ( isNaN ( d2 . m43 ) , true )
524
+ assert . strictEqual ( isNaN ( d2 . m44 ) , true )
525
+ assert . strictEqual ( d2 . is2D , false )
526
+ } )
527
+ } )
408
528
409
529
describe ( 'transformPoint' , function ( ) {
410
530
it ( 'works' , function ( ) {
@@ -437,7 +557,7 @@ describe('DOMMatrix', function () {
437
557
] ) )
438
558
} )
439
559
} )
440
-
560
+
441
561
describe ( 'toFloat64Array' , function ( ) {
442
562
it ( 'works' , function ( ) {
443
563
var x = new DOMMatrix ( )
0 commit comments