Fix subtraction.

Original commit message from CVS:
* check/gst/gstvalue.c: (GST_START_TEST):
* gst/gstvalue.c: (gst_value_fraction_subtract):
Fix subtraction.
This commit is contained in:
Jan Schmidt 2005-11-22 09:42:17 +00:00
parent f6afcd058c
commit 97d08eb1a3
4 changed files with 39 additions and 8 deletions

View file

@ -1,3 +1,9 @@
2005-11-22 Jan Schmidt <thaytan@mad.scientist.com>
* check/gst/gstvalue.c: (GST_START_TEST):
* gst/gstvalue.c: (gst_value_fraction_subtract):
Fix subtraction.
2005-11-22 Stefan Kost <ensonic@users.sf.net>
* gst/gst.h:

View file

@ -993,6 +993,22 @@ GST_START_TEST (test_value_subtract_fraction)
g_value_unset (&src1);
g_value_unset (&src2);
g_value_unset (&result);
/* Subtract 12/13 from 4/3 */
g_value_init (&src1, GST_TYPE_FRACTION);
g_value_init (&src2, GST_TYPE_FRACTION);
g_value_init (&result, GST_TYPE_FRACTION);
gst_value_set_fraction (&src1, 4, 3);
gst_value_set_fraction (&src2, 12, 13);
fail_unless (gst_value_fraction_subtract (&result, &src1, &src2) == TRUE);
fail_unless (gst_value_get_fraction_numerator (&result) == 16);
fail_unless (gst_value_get_fraction_denominator (&result) == 39);
g_value_unset (&src1);
g_value_unset (&src2);
g_value_unset (&result);
/* Subtract 1/12 from 7/8 */
}
GST_END_TEST;

View file

@ -3282,7 +3282,7 @@ gboolean
gst_value_fraction_subtract (GValue * dest,
const GValue * minuend, const GValue * subtrahend)
{
gint gcd, n1, n2, d1, d2;
gint n1, n2, d1, d2;
g_return_val_if_fail (GST_VALUE_HOLDS_FRACTION (minuend), FALSE);
g_return_val_if_fail (GST_VALUE_HOLDS_FRACTION (subtrahend), FALSE);
@ -3301,13 +3301,6 @@ gst_value_fraction_subtract (GValue * dest,
return TRUE;
}
gcd = gst_greatest_common_divisor (n1, d2);
n1 /= gcd;
d2 /= gcd;
gcd = gst_greatest_common_divisor (n2, d1);
n2 /= gcd;
d1 /= gcd;
g_return_val_if_fail (n1 == 0 || G_MAXINT / ABS (n1) >= ABS (d2), FALSE);
g_return_val_if_fail (G_MAXINT / ABS (d1) >= ABS (n2), FALSE);
g_return_val_if_fail (G_MAXINT / ABS (d1) >= ABS (d2), FALSE);

View file

@ -993,6 +993,22 @@ GST_START_TEST (test_value_subtract_fraction)
g_value_unset (&src1);
g_value_unset (&src2);
g_value_unset (&result);
/* Subtract 12/13 from 4/3 */
g_value_init (&src1, GST_TYPE_FRACTION);
g_value_init (&src2, GST_TYPE_FRACTION);
g_value_init (&result, GST_TYPE_FRACTION);
gst_value_set_fraction (&src1, 4, 3);
gst_value_set_fraction (&src2, 12, 13);
fail_unless (gst_value_fraction_subtract (&result, &src1, &src2) == TRUE);
fail_unless (gst_value_get_fraction_numerator (&result) == 16);
fail_unless (gst_value_get_fraction_denominator (&result) == 39);
g_value_unset (&src1);
g_value_unset (&src2);
g_value_unset (&result);
/* Subtract 1/12 from 7/8 */
}
GST_END_TEST;