1 #include "tests.h"
2
irand()3 static int irand()
4 {
5 return rand() - RAND_MAX / 2;
6 }
7
main()8 int main()
9 {
10 pl_log log = pl_test_logger();
11 pl_log_update(log, NULL);
12 pl_log_destroy(&log);
13
14 // Test some misc helper functions
15 struct pl_rect2d rc2 = {
16 irand(), irand(),
17 irand(), irand(),
18 };
19
20 struct pl_rect3d rc3 = {
21 irand(), irand(), irand(),
22 irand(), irand(), irand(),
23 };
24
25 pl_rect2d_normalize(&rc2);
26 REQUIRE(rc2.x1 >= rc2.x0);
27 REQUIRE(rc2.y1 >= rc2.y0);
28
29 pl_rect3d_normalize(&rc3);
30 REQUIRE(rc3.x1 >= rc3.x0);
31 REQUIRE(rc3.y1 >= rc3.y0);
32 REQUIRE(rc3.z1 >= rc3.z0);
33
34 struct pl_rect2df rc2f = {
35 RANDOM, RANDOM,
36 RANDOM, RANDOM,
37 };
38
39 struct pl_rect3df rc3f = {
40 RANDOM, RANDOM, RANDOM,
41 RANDOM, RANDOM, RANDOM,
42 };
43
44 pl_rect2df_normalize(&rc2f);
45 REQUIRE(rc2.x1 >= rc2.x0);
46 REQUIRE(rc2.y1 >= rc2.y0);
47
48 pl_rect3df_normalize(&rc3f);
49 REQUIRE(rc3.x1 >= rc3.x0);
50 REQUIRE(rc3.y1 >= rc3.y0);
51 REQUIRE(rc3.z1 >= rc3.z0);
52
53 struct pl_rect2d rc2r = pl_rect2df_round(&rc2f);
54 struct pl_rect3d rc3r = pl_rect3df_round(&rc3f);
55
56 REQUIRE(fabs(rc2r.x0 - rc2f.x0) <= 0.5);
57 REQUIRE(fabs(rc2r.x1 - rc2f.x1) <= 0.5);
58 REQUIRE(fabs(rc2r.y0 - rc2f.y0) <= 0.5);
59 REQUIRE(fabs(rc2r.y1 - rc2f.y1) <= 0.5);
60
61 REQUIRE(fabs(rc3r.x0 - rc3f.x0) <= 0.5);
62 REQUIRE(fabs(rc3r.x1 - rc3f.x1) <= 0.5);
63 REQUIRE(fabs(rc3r.y0 - rc3f.y0) <= 0.5);
64 REQUIRE(fabs(rc3r.y1 - rc3f.y1) <= 0.5);
65 REQUIRE(fabs(rc3r.z0 - rc3f.z0) <= 0.5);
66 REQUIRE(fabs(rc3r.z1 - rc3f.z1) <= 0.5);
67
68 struct pl_transform3x3 tr = {
69 .mat = {{
70 { RANDOM, RANDOM, RANDOM },
71 { RANDOM, RANDOM, RANDOM },
72 { RANDOM, RANDOM, RANDOM },
73 }},
74 .c = { RANDOM, RANDOM, RANDOM },
75 };
76
77 struct pl_transform3x3 tr2 = tr;
78 float scale = 1.0 + RANDOM;
79 pl_transform3x3_scale(&tr2, scale);
80 pl_transform3x3_invert(&tr2);
81 pl_transform3x3_invert(&tr2);
82 pl_transform3x3_scale(&tr2, 1.0 / scale);
83
84 for (int i = 0; i < 3; i++) {
85 for (int j = 0; j < 3; j++) {
86 printf("%f %f\n", tr.mat.m[i][j], tr2.mat.m[i][j]);
87 REQUIRE(feq(tr.mat.m[i][j], tr2.mat.m[i][j], 1e-4));
88 }
89 REQUIRE(feq(tr.c[i], tr2.c[i], 1e-4));
90 }
91
92 // Test aspect ratio code
93 const struct pl_rect2df rc1080p = {0, 0, 1920, 1080};
94 const struct pl_rect2df rc43 = {0, 0, 1024, 768};
95 struct pl_rect2df rc;
96
97 REQUIRE(feq(pl_rect2df_aspect(&rc1080p), 16.0/9.0, 1e-8));
98 REQUIRE(feq(pl_rect2df_aspect(&rc43), 4.0/3.0, 1e-8));
99
100 #define pl_rect2df_midx(rc) (((rc).x0 + (rc).x1) / 2.0)
101 #define pl_rect2df_midy(rc) (((rc).y0 + (rc).y1) / 2.0)
102
103 for (float aspect = 0.2; aspect < 3.0; aspect += 0.4) {
104 for (float scan = 0.0; scan <= 1.0; scan += 0.5) {
105 rc = rc1080p;
106 pl_rect2df_aspect_set(&rc, aspect, scan);
107 printf("aspect %.2f, panscan %.1f: {%f %f} -> {%f %f}\n",
108 aspect, scan, rc.x0, rc.y0, rc.x1, rc.y1);
109 REQUIRE(feq(pl_rect2df_aspect(&rc), aspect, 1e-6));
110 REQUIRE(feq(pl_rect2df_midx(rc), pl_rect2df_midx(rc1080p), 1e-6));
111 REQUIRE(feq(pl_rect2df_midy(rc), pl_rect2df_midy(rc1080p), 1e-6));
112 }
113 }
114
115 rc = rc1080p;
116 pl_rect2df_aspect_fit(&rc, &rc43, 0.0);
117 REQUIRE(feq(pl_rect2df_aspect(&rc), pl_rect2df_aspect(&rc43), 1e-6));
118 REQUIRE(feq(pl_rect2df_midx(rc), pl_rect2df_midx(rc1080p), 1e-6));
119 REQUIRE(feq(pl_rect2df_midy(rc), pl_rect2df_midy(rc1080p), 1e-6));
120 REQUIRE(feq(pl_rect_w(rc), pl_rect_w(rc43), 1e-6));
121 REQUIRE(feq(pl_rect_h(rc), pl_rect_h(rc43), 1e-6));
122
123 rc = rc43;
124 pl_rect2df_aspect_fit(&rc, &rc1080p, 0.0);
125 REQUIRE(feq(pl_rect2df_aspect(&rc), pl_rect2df_aspect(&rc1080p), 1e-6));
126 REQUIRE(feq(pl_rect2df_midx(rc), pl_rect2df_midx(rc43), 1e-6));
127 REQUIRE(feq(pl_rect2df_midy(rc), pl_rect2df_midy(rc43), 1e-6));
128 REQUIRE(feq(pl_rect_w(rc), pl_rect_w(rc43), 1e-6));
129
130 rc = (struct pl_rect2df) { 1920, 1080, 0, 0 };
131 pl_rect2df_offset(&rc, 50, 100);
132 REQUIRE(feq(rc.x0, 1870, 1e-6));
133 REQUIRE(feq(rc.x1, -50, 1e-6));
134 REQUIRE(feq(rc.y0, 980, 1e-6));
135 REQUIRE(feq(rc.y1, -100, 1e-6));
136 }
137