[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: GParamSpec further funcs
- From: Kevin Ryde <user42 zip com au>
- To: gtk-perl-list gnome org
- Subject: Re: GParamSpec further funcs
- Date: Sat, 23 Aug 2008 11:26:53 +1000
Torsten Schoenfeld <kaffeetisch gmx de> writes:
>
> It needs more work to cope with unichar values (at least).
Oh, just in the tests though. I see it wants integer values through
gperl_value_from_sv(). New one below.
If integers are the right thing it's a little inconsistent with
get_default_value() returning a string. Not much fun if you thought to
do a generic
$pspec->values_cmp ($somevalue, $pspec->get_default_value())
to compare against the default say. Hmm. Is there an example
program/module working with a unichar param to have a look at?
--- GParamSpec.xs 19 Aug 2008 09:34:28 +1000 1.25
+++ GParamSpec.xs 23 Aug 2008 11:26:12 +1000
@@ -625,6 +625,26 @@
RETVAL
+MODULE = Glib::ParamSpec PACKAGE = Glib::ParamSpec PREFIX = g_param_
+
+int
+g_param_values_cmp (GParamSpec * pspec, SV *value1, SV *value2)
+ PREINIT:
+ GValue v1 = { 0, };
+ GValue v2 = { 0, };
+ GType type;
+ CODE:
+ type = G_PARAM_SPEC_VALUE_TYPE (pspec);
+ g_value_init (&v1, type);
+ g_value_init (&v2, type);
+ gperl_value_from_sv (&v1, value1);
+ gperl_value_from_sv (&v2, value2);
+ RETVAL = g_param_values_cmp (pspec, &v1, &v2);
+ g_value_unset (&v1);
+ g_value_unset (&v2);
+ OUTPUT:
+ RETVAL
+
MODULE = Glib::ParamSpec PACKAGE = Glib::Param::Char
## actually for all signed integer types
--- e.t 19 Aug 2008 09:04:49 +1000 1.3
+++ e.t 23 Aug 2008 11:16:01 +1000
@@ -4,7 +4,7 @@
#
use strict;
use Glib ':constants';
-use Test::More tests => 232;
+use Test::More tests => 279;
# first register some types with which to play below.
@@ -60,6 +60,11 @@
TRUE, 'readable');
pspec_common_ok ($pspec, 'Boolean', 'readable');
ok ($pspec->get_default_value, "Boolean default (expect TRUE)");
+is ($pspec->values_cmp(0,1), -1);
+is ($pspec->values_cmp(1,0), 1);
+is ($pspec->values_cmp(1,1), 0);
+is ($pspec->values_cmp(123,456), 0);
+is ($pspec->values_cmp('',''), 0);
push @params, $pspec;
@@ -82,6 +87,9 @@
is ($pspec->get_minimum, $min, "$nick min");
is ($pspec->get_maximum, $max, "$nick max");
is ($pspec->get_default_value, $default, "$nick default");
+ is ($pspec->values_cmp(22,33), -1);
+ is ($pspec->values_cmp(33,22), 1);
+ is ($pspec->values_cmp(22,22), 0);
push @params, $pspec;
}
@@ -102,6 +110,12 @@
is_float ($pspec->get_maximum, $max, "$nick maximum");
is_float ($pspec->get_default_value, $default, "$nick default");
ok ($pspec->get_epsilon > 0.0, "$nick epsilon");
+ is ($pspec->values_cmp(22,33), -1);
+ is ($pspec->values_cmp(33,22), 1);
+ is ($pspec->values_cmp(22,22), 0);
+ is ($pspec->values_cmp(0, $pspec->get_epsilon / 2), 0);
+ is ($pspec->values_cmp($pspec->get_epsilon / 4,
+ - $pspec->get_epsilon / 4), 0);
push @params, $pspec;
}
@@ -116,6 +130,10 @@
pspec_common_ok ($pspec, 'Enum', G_PARAM_READWRITE, 'Fish');
is ($pspec->get_enum_class, 'Fish', 'enum class');
is ($pspec->get_default_value, 'blue', "Enum default");
+is ($pspec->values_cmp('one','two'), -1);
+is ($pspec->values_cmp('red','blue'), -1);
+is ($pspec->values_cmp('blue','one'), 1);
+is ($pspec->values_cmp('red','red'), 0);
push @params, $pspec;
@@ -125,6 +143,9 @@
pspec_common_ok ($pspec, 'Flags', G_PARAM_READWRITE, 'Rain');
is ($pspec->get_flags_class, 'Rain', 'flags class');
ok ($pspec->get_default_value == ['light', 'warm'], 'Flags default');
+is ($pspec->values_cmp('warm','cold'), -1);
+is ($pspec->values_cmp(['cold','light'],['light']), 1);
+is ($pspec->values_cmp(['heavy'],'heavy'), 0);
push @params, $pspec;
@@ -133,6 +154,10 @@
# we only know one boxed type at this point.
'Glib::Scalar', G_PARAM_READWRITE);
pspec_common_ok ($pspec, 'Boxed', G_PARAM_READWRITE, 'Glib::Scalar');
+{ # 1 or -1 depending on address, which is unpredictable, so just test !=0
+ ok ($pspec->values_cmp('foo','bar') != 0);
+ # almost no Glib::Scalar has an equal address, so no tests for ==0 here
+}
push @params, $pspec;
@@ -140,6 +165,7 @@
'I object, Your Honor, that\'s pure conjecture!',
'Skeezle', G_PARAM_READWRITE);
pspec_common_ok ($pspec, 'Object', G_PARAM_READWRITE, 'Skeezle');
+is ($pspec->values_cmp(undef,undef), 0);
push @params, $pspec;
@@ -155,6 +181,8 @@
ok ($pspec->get_flags == G_PARAM_READWRITE, 'Param flags');
is ($pspec->get_value_type, 'Glib::Param::Enum', 'Param value type');
ok (! $pspec->get_owner_type, 'Param owner type');
+is ($pspec->values_cmp($pspec,$pspec), 0);
+ok ($pspec->values_cmp($pspec,$params[0]) != 0);
push @params, $pspec;
@@ -163,6 +191,9 @@
'ö', qw/readable/);
pspec_common_ok ($pspec, 'Unichar', qw/readable/, 'Glib::UInt');
is ($pspec->get_default_value, 'ö', 'Unichar default');
+is ($pspec->values_cmp(65,66), -1);
+is ($pspec->values_cmp(66,65), 1);
+is ($pspec->values_cmp(66,66), 0);
push @params, $pspec;
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]