[前][次][番号順一覧][スレッド一覧]

ruby-changes:12256

From: tadf <ko1@a...>
Date: Fri, 3 Jul 2009 19:50:43 +0900 (JST)
Subject: [ruby-changes:12256] Ruby:r23946 (trunk): * complex.c: undef-ed shome methods.

tadf	2009-07-03 19:50:17 +0900 (Fri, 03 Jul 2009)

  New Revision: 23946

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=23946

  Log:
    * complex.c: undef-ed shome methods.  [ruby-core:24110]
    * complex.c (Numeric#arg): NaN for NaN.  [ruby-core:24116]

  Modified files:
    trunk/ChangeLog
    trunk/complex.c
    trunk/test/ruby/test_complex.rb

Index: complex.c
===================================================================
--- complex.c	(revision 23945)
+++ complex.c	(revision 23946)
@@ -1690,9 +1690,9 @@
 
 /*
  * call-seq:
- *    num.arg    ->  float
- *    num.angle  ->  float
- *    num.phase  ->  float
+ *    num.arg    ->  0 or float
+ *    num.angle  ->  0 or float
+ *    num.phase  ->  0 or float
  *
  * Returns 0 if the value is positive, pi otherwise.
  */
@@ -1742,6 +1742,22 @@
 }
 
 /*
+ * call-seq:
+ *    flo.arg    ->  0 or float
+ *    flo.angle  ->  0 or float
+ *    flo.phase  ->  0 or float
+ *
+ * Returns 0 if the value is positive, pi otherwise.
+ */
+static VALUE
+float_arg(VALUE self)
+{
+    if (isnan(RFLOAT_VALUE(self)))
+	return self;
+    return rb_call_super(0, 0);
+}
+
+/*
  * A complex number can be represented as a paired real number with
  * imaginary unit; a+bi.  Where a is real part, b is imaginary part
  * and i is imaginary unit.  Real a equals complex a+0i
@@ -1824,16 +1840,19 @@
 
     rb_define_global_function("Complex", nucomp_f_complex, -1);
 
+    rb_undef_method(rb_cComplex, "%");
     rb_undef_method(rb_cComplex, "<");
     rb_undef_method(rb_cComplex, "<=");
     rb_undef_method(rb_cComplex, "<=>");
     rb_undef_method(rb_cComplex, ">");
     rb_undef_method(rb_cComplex, ">=");
     rb_undef_method(rb_cComplex, "between?");
+    rb_undef_method(rb_cComplex, "div");
     rb_undef_method(rb_cComplex, "divmod");
     rb_undef_method(rb_cComplex, "floor");
     rb_undef_method(rb_cComplex, "ceil");
     rb_undef_method(rb_cComplex, "modulo");
+    rb_undef_method(rb_cComplex, "remainder");
     rb_undef_method(rb_cComplex, "round");
     rb_undef_method(rb_cComplex, "step");
     rb_undef_method(rb_cComplex, "truncate");
@@ -1921,6 +1940,10 @@
     rb_define_method(rb_cNumeric, "conjugate", numeric_conj, 0);
     rb_define_method(rb_cNumeric, "conj", numeric_conj, 0);
 
+    rb_define_method(rb_cFloat, "arg", float_arg, 0);
+    rb_define_method(rb_cFloat, "angle", float_arg, 0);
+    rb_define_method(rb_cFloat, "phase", float_arg, 0);
+
     rb_define_const(rb_cComplex, "I",
 		    f_complex_new_bang2(rb_cComplex, ZERO, ONE));
 }
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 23945)
+++ ChangeLog	(revision 23946)
@@ -1,3 +1,9 @@
+Fri Jul  3 19:48:40 2009  Tadayoshi Funaba  <tadf@d...>
+
+	* complex.c: undef-ed shome methods.  [ruby-core:24110]
+
+	* complex.c (Numeric#arg): NaN for NaN.  [ruby-core:24116]
+
 Fri Jul  3 18:35:06 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* vm_core.h (struct rb_iseq_struct): fixed types.
Index: test/ruby/test_complex.rb
===================================================================
--- test/ruby/test_complex.rb	(revision 23945)
+++ test/ruby/test_complex.rb	(revision 23946)
@@ -519,7 +519,7 @@
       assert_instance_of(Fixnum, Complex(1,2) - Complex(1,2))
       assert_instance_of(Fixnum, Complex(1,2) * 0)
       assert_instance_of(Fixnum, Complex(1,2) / Complex(1,2))
-      assert_instance_of(Fixnum, Complex(1,2).div(Complex(1,2)))
+#      assert_instance_of(Fixnum, Complex(1,2).div(Complex(1,2)))
       assert_instance_of(Fixnum, Complex(1,2).quo(Complex(1,2)))
 #      assert_instance_of(Fixnum, Complex(1,2) ** 0) # mathn's bug
     end
@@ -779,17 +779,19 @@
 
   def test_respond
     c = Complex(1,1)
+    assert_equal(false, c.respond_to?(:%))
     assert_equal(false, c.respond_to?(:<))
     assert_equal(false, c.respond_to?(:<=))
     assert_equal(false, c.respond_to?(:<=>))
     assert_equal(false, c.respond_to?(:>))
     assert_equal(false, c.respond_to?(:>=))
     assert_equal(false, c.respond_to?(:between?))
-#    assert_equal(false, c.respond_to?(:div)) # ?
+    assert_equal(false, c.respond_to?(:div))
     assert_equal(false, c.respond_to?(:divmod))
     assert_equal(false, c.respond_to?(:floor))
     assert_equal(false, c.respond_to?(:ceil))
     assert_equal(false, c.respond_to?(:modulo))
+    assert_equal(false, c.respond_to?(:remainder))
     assert_equal(false, c.respond_to?(:round))
     assert_equal(false, c.respond_to?(:step))
     assert_equal(false, c.respond_to?(:tunrcate))

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]