avutil/rational: av_add_stable() test code
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 3 Jan 2014 16:35:09 +0000 (17:35 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 4 Jan 2014 14:10:14 +0000 (15:10 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavutil/rational.c

index ec2f2e5..55a8dd5 100644 (file)
@@ -171,6 +171,36 @@ int main(void)
             }
         }
     }
+
+    for (a.num = 1; a.num <= 10; a.num++) {
+        for (a.den = 1; a.den <= 10; a.den++) {
+            if (av_gcd(a.num, a.den) > 1)
+                continue;
+            for (b.num = 1; b.num <= 10; b.num++) {
+                for (b.den = 1; b.den <= 10; b.den++) {
+                    int start;
+                    if (av_gcd(b.num, b.den) > 1)
+                        continue;
+                    if (av_cmp_q(b, a) < 0)
+                        continue;
+                    for (start = 0; start < 10 ; start++) {
+                        int acc= start;
+                        int i;
+
+                        for (i = 0; i<100; i++) {
+                            int exact = start + av_rescale_q(i+1, b, a);
+                            acc = av_add_stable(a, acc, b, 1);
+                            if (FFABS(acc - exact) > 2) {
+                                av_log(NULL, AV_LOG_ERROR, "%d/%d %d/%d, %d %d\n", a.num,
+                                       a.den, b.num, b.den, acc, exact);
+                                return 1;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
     return 0;
 }
 #endif