15
15
#endif
16
16
#endif
17
17
18
+ // MARK: - Vector
19
+
20
+ // CGVector is only available on Darwin.
21
+ public struct Vector {
22
+ let dx : CGFloat
23
+ let dy : CGFloat
24
+ }
25
+
18
26
// MARK: - Tests
19
27
20
28
class TestAffineTransform : XCTestCase {
@@ -49,7 +57,7 @@ class TestAffineTransform: XCTestCase {
49
57
50
58
extension TestAffineTransform {
51
59
func check(
52
- vector: CGVector ,
60
+ vector: Vector ,
53
61
withTransform transform: AffineTransform ,
54
62
mapsToPoint expectedPoint: CGPoint ,
55
63
mapsToSize expectedSize: CGSize ,
@@ -194,7 +202,7 @@ extension TestAffineTransform {
194
202
// = [ x*m11+y*m21+tX x*m12+y*m22+tY ]
195
203
196
204
check (
197
- vector: CGVector ( dx: 10 , dy: 20 ) ,
205
+ vector: Vector ( dx: 10 , dy: 20 ) ,
198
206
withTransform: AffineTransform (
199
207
m11: 1 , m12: 2 ,
200
208
m21: 3 , m22: 4 ,
@@ -213,7 +221,7 @@ extension TestAffineTransform {
213
221
)
214
222
215
223
check (
216
- vector: CGVector ( dx: 5 , dy: 25 ) ,
224
+ vector: Vector ( dx: 5 , dy: 25 ) ,
217
225
withTransform: AffineTransform (
218
226
m11: 5 , m12: 4 ,
219
227
m21: 3 , m22: 2 ,
@@ -254,7 +262,7 @@ extension TestAffineTransform {
254
262
255
263
func testIdentity( ) {
256
264
check (
257
- vector: CGVector ( dx: 25 , dy: 10 ) ,
265
+ vector: Vector ( dx: 25 , dy: 10 ) ,
258
266
withTransform: . identity,
259
267
mapsToPoint: CGPoint ( x: 25 , y: 10 ) ,
260
268
mapsToSize: CGSize ( width: 25 , height: 10 )
@@ -288,7 +296,7 @@ extension TestAffineTransform {
288
296
289
297
func testTranslation( ) {
290
298
check (
291
- vector: CGVector ( dx: 10 , dy: 10 ) ,
299
+ vector: Vector ( dx: 10 , dy: 10 ) ,
292
300
withTransform: AffineTransform (
293
301
translationByX: 0 , byY: 0
294
302
) ,
@@ -297,7 +305,7 @@ extension TestAffineTransform {
297
305
)
298
306
299
307
check (
300
- vector: CGVector ( dx: 10 , dy: 10 ) ,
308
+ vector: Vector ( dx: 10 , dy: 10 ) ,
301
309
withTransform: AffineTransform (
302
310
translationByX: 0 , byY: 5
303
311
) ,
@@ -306,7 +314,7 @@ extension TestAffineTransform {
306
314
)
307
315
308
316
check (
309
- vector: CGVector ( dx: 10 , dy: 10 ) ,
317
+ vector: Vector ( dx: 10 , dy: 10 ) ,
310
318
withTransform: AffineTransform (
311
319
translationByX: 5 , byY: 5
312
320
) ,
@@ -315,7 +323,7 @@ extension TestAffineTransform {
315
323
)
316
324
317
325
check (
318
- vector: CGVector ( dx: - 2 , dy: - 3 ) ,
326
+ vector: Vector ( dx: - 2 , dy: - 3 ) ,
319
327
// Translate by 5
320
328
withTransform: {
321
329
var transform = AffineTransform . identity
@@ -386,7 +394,7 @@ extension TestAffineTransform {
386
394
387
395
func testScaling( ) {
388
396
check (
389
- vector: CGVector ( dx: 10 , dy: 10 ) ,
397
+ vector: Vector ( dx: 10 , dy: 10 ) ,
390
398
withTransform: AffineTransform (
391
399
scaleByX: 1 , byY: 0
392
400
) ,
@@ -395,7 +403,7 @@ extension TestAffineTransform {
395
403
)
396
404
397
405
check (
398
- vector: CGVector ( dx: 10 , dy: 10 ) ,
406
+ vector: Vector ( dx: 10 , dy: 10 ) ,
399
407
withTransform: AffineTransform (
400
408
scaleByX: 0.5 , byY: 1
401
409
) ,
@@ -404,7 +412,7 @@ extension TestAffineTransform {
404
412
)
405
413
406
414
check (
407
- vector: CGVector ( dx: 10 , dy: 10 ) ,
415
+ vector: Vector ( dx: 10 , dy: 10 ) ,
408
416
withTransform: AffineTransform (
409
417
scaleByX: 0 , byY: 2
410
418
) ,
@@ -413,7 +421,7 @@ extension TestAffineTransform {
413
421
)
414
422
415
423
check (
416
- vector: CGVector ( dx: 10 , dy: 10 ) ,
424
+ vector: Vector ( dx: 10 , dy: 10 ) ,
417
425
// Scale by (2, 0)
418
426
withTransform: {
419
427
var transform = AffineTransform . identity
@@ -442,7 +450,7 @@ extension TestAffineTransform {
442
450
file: StaticString = #file,
443
451
line: UInt = #line
444
452
) {
445
- let vector = CGVector ( dx: 10 , dy: 15 )
453
+ let vector = Vector ( dx: 10 , dy: 15 )
446
454
447
455
self . check (
448
456
vector: vector, withTransform: rotation,
@@ -491,46 +499,46 @@ extension TestAffineTransform {
491
499
492
500
func testRotation( ) {
493
501
check (
494
- vector: CGVector ( dx: 10 , dy: 15 ) ,
502
+ vector: Vector ( dx: 10 , dy: 15 ) ,
495
503
withTransform: AffineTransform ( rotationByDegrees: 0 ) ,
496
504
mapsToPoint: CGPoint ( x: 10 , y: 15 ) ,
497
505
mapsToSize: CGSize ( width: 10 , height: 15 )
498
506
)
499
507
500
508
check (
501
- vector: CGVector ( dx: 10 , dy: 15 ) ,
509
+ vector: Vector ( dx: 10 , dy: 15 ) ,
502
510
withTransform: AffineTransform ( rotationByDegrees: 1080 ) ,
503
511
mapsToPoint: CGPoint ( x: 10 , y: 15 ) ,
504
512
mapsToSize: CGSize ( width: 10 , height: 15 )
505
513
)
506
514
507
515
// Counter-clockwise rotation
508
516
check (
509
- vector: CGVector ( dx: 15 , dy: 10 ) ,
517
+ vector: Vector ( dx: 15 , dy: 10 ) ,
510
518
withTransform: AffineTransform ( rotationByRadians: . pi / 2 ) ,
511
519
mapsToPoint: CGPoint ( x: - 10 , y: 15 ) ,
512
520
mapsToSize: CGSize ( width: - 10 , height: 15 )
513
521
)
514
522
515
523
// Clockwise rotation
516
524
check (
517
- vector: CGVector ( dx: 15 , dy: 10 ) ,
525
+ vector: Vector ( dx: 15 , dy: 10 ) ,
518
526
withTransform: AffineTransform ( rotationByDegrees: - 90 ) ,
519
527
mapsToPoint: CGPoint ( x: 10 , y: - 15 ) ,
520
528
mapsToSize: CGSize ( width: 10 , height: - 15 )
521
529
)
522
530
523
531
// Reflect about origin
524
532
check (
525
- vector: CGVector ( dx: 10 , dy: 15 ) ,
533
+ vector: Vector ( dx: 10 , dy: 15 ) ,
526
534
withTransform: AffineTransform ( rotationByRadians: . pi) ,
527
535
mapsToPoint: CGPoint ( x: - 10 , y: - 15 ) ,
528
536
mapsToSize: CGSize ( width: - 10 , height: - 15 )
529
537
)
530
538
531
539
// Composed reflection about origin
532
540
check (
533
- vector: CGVector ( dx: 10 , dy: 15 ) ,
541
+ vector: Vector ( dx: 10 , dy: 15 ) ,
534
542
// Rotate by 180º
535
543
withTransform: {
536
544
var transform = AffineTransform . identity
@@ -551,7 +559,7 @@ extension TestAffineTransform {
551
559
extension TestAffineTransform {
552
560
func testTranslationScaling( ) {
553
561
check (
554
- vector: CGVector ( dx: 1 , dy: 3 ) ,
562
+ vector: Vector ( dx: 1 , dy: 3 ) ,
555
563
// Translate by (2, 0) then scale by (5, -5)
556
564
withTransform: {
557
565
var transform = AffineTransform . identity
@@ -569,7 +577,7 @@ extension TestAffineTransform {
569
577
)
570
578
571
579
check (
572
- vector: CGVector ( dx: 3 , dy: 1 ) ,
580
+ vector: Vector ( dx: 3 , dy: 1 ) ,
573
581
// Scale by (-5, 5) then scale by (0, 10)
574
582
withTransform: {
575
583
var transform = AffineTransform . identity
@@ -586,7 +594,7 @@ extension TestAffineTransform {
586
594
587
595
func testTranslationRotation( ) {
588
596
check (
589
- vector: CGVector ( dx: 10 , dy: 10 ) ,
597
+ vector: Vector ( dx: 10 , dy: 10 ) ,
590
598
// Translate by (20, -5) then rotate by 90º
591
599
withTransform: {
592
600
var transform = AffineTransform . identity
@@ -601,7 +609,7 @@ extension TestAffineTransform {
601
609
)
602
610
603
611
check (
604
- vector: CGVector ( dx: 10 , dy: 10 ) ,
612
+ vector: Vector ( dx: 10 , dy: 10 ) ,
605
613
// Rotate by 180º and then translate by (20, 15)
606
614
withTransform: {
607
615
var transform = AffineTransform . identity
@@ -618,7 +626,7 @@ extension TestAffineTransform {
618
626
619
627
func testScalingRotation( ) {
620
628
check (
621
- vector: CGVector ( dx: 20 , dy: 5 ) ,
629
+ vector: Vector ( dx: 20 , dy: 5 ) ,
622
630
// Scale by (0.5, 3) then rotate by -90º
623
631
withTransform: {
624
632
var transform = AffineTransform . identity
@@ -633,7 +641,7 @@ extension TestAffineTransform {
633
641
)
634
642
635
643
check (
636
- vector: CGVector ( dx: 20 , dy: 5 ) ,
644
+ vector: Vector ( dx: 20 , dy: 5 ) ,
637
645
// Rotate by -90º the scale by (0.5, 3)
638
646
withTransform: {
639
647
var transform = AffineTransform . identity
@@ -681,7 +689,7 @@ extension TestAffineTransform {
681
689
} ( )
682
690
683
691
check (
684
- vector: CGVector ( dx: 10 , dy: 10 ) ,
692
+ vector: Vector ( dx: 10 , dy: 10 ) ,
685
693
withTransform: recoveredIdentity,
686
694
mapsToPoint: CGPoint ( x: 10 , y: 10 ) ,
687
695
mapsToSize: CGSize ( width: 10 , height: 10 )
@@ -694,7 +702,7 @@ extension TestAffineTransform {
694
702
extension TestAffineTransform {
695
703
func testPrependTransform( ) {
696
704
check (
697
- vector: CGVector ( dx: 10 , dy: 15 ) ,
705
+ vector: Vector ( dx: 10 , dy: 15 ) ,
698
706
withTransform: {
699
707
var transform = AffineTransform . identity
700
708
transform. prepend ( . identity)
@@ -705,7 +713,7 @@ extension TestAffineTransform {
705
713
)
706
714
707
715
check (
708
- vector: CGVector ( dx: 10 , dy: 15 ) ,
716
+ vector: Vector ( dx: 10 , dy: 15 ) ,
709
717
// Scale by 2 then translate by (10, 0)
710
718
withTransform: {
711
719
let scale = AffineTransform ( scale: 2 )
@@ -724,7 +732,7 @@ extension TestAffineTransform {
724
732
725
733
func testAppendTransform( ) {
726
734
check (
727
- vector: CGVector ( dx: 10 , dy: 15 ) ,
735
+ vector: Vector ( dx: 10 , dy: 15 ) ,
728
736
withTransform: {
729
737
var transform = AffineTransform . identity
730
738
transform. append ( . identity)
@@ -735,7 +743,7 @@ extension TestAffineTransform {
735
743
)
736
744
737
745
check (
738
- vector: CGVector ( dx: 10 , dy: 15 ) ,
746
+ vector: Vector ( dx: 10 , dy: 15 ) ,
739
747
// Translate by (10, 0) then scale by 2
740
748
withTransform: {
741
749
let scale = AffineTransform ( scale: 2 )
0 commit comments