commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r6305 - gnuradio/branches/features/inband-usb/pmt/src/


From: eb
Subject: [Commit-gnuradio] r6305 - gnuradio/branches/features/inband-usb/pmt/src/lib
Date: Tue, 4 Sep 2007 17:05:28 -0600 (MDT)

Author: eb
Date: 2007-09-04 17:05:28 -0600 (Tue, 04 Sep 2007)
New Revision: 6305

Modified:
   gnuradio/branches/features/inband-usb/pmt/src/lib/pmt.cc
   gnuradio/branches/features/inband-usb/pmt/src/lib/qa_pmt_prims.cc
Log:
fixed pmt_length for pairs

Modified: gnuradio/branches/features/inband-usb/pmt/src/lib/pmt.cc
===================================================================
--- gnuradio/branches/features/inband-usb/pmt/src/lib/pmt.cc    2007-09-04 
23:04:57 UTC (rev 6304)
+++ gnuradio/branches/features/inband-usb/pmt/src/lib/pmt.cc    2007-09-04 
23:05:28 UTC (rev 6305)
@@ -748,24 +748,19 @@
   if (x->is_uniform_vector())
     return _uniform_vector(x)->length();
 
-  if (x->is_pair()) {
-
+  if (x->is_pair() || x->is_null()) {
     size_t length=0;
-    pmt_t alist = x;
-
-    while (pmt_is_pair(alist)){
-      pmt_t p = pmt_car(alist);
-      if (!pmt_is_pair(p))     // malformed alist
-        throw pmt_wrong_type("pmt_length", x);
-
-      alist = pmt_cdr(alist);
+    while (pmt_is_pair(x)){
       length++;
+      x = pmt_cdr(x);
     }
+    if (pmt_is_null(x))
+      return length;
 
-    return length;
+    // not a proper list
+    throw pmt_wrong_type("pmt_length", x);
   }
 
-
   // FIXME dictionary length (number of entries)
 
   throw pmt_wrong_type("pmt_length", x);

Modified: gnuradio/branches/features/inband-usb/pmt/src/lib/qa_pmt_prims.cc
===================================================================
--- gnuradio/branches/features/inband-usb/pmt/src/lib/qa_pmt_prims.cc   
2007-09-04 23:04:57 UTC (rev 6304)
+++ gnuradio/branches/features/inband-usb/pmt/src/lib/qa_pmt_prims.cc   
2007-09-04 23:05:28 UTC (rev 6305)
@@ -139,11 +139,16 @@
   pmt_t s3 = pmt_string_to_symbol("s3");
 
 
+  CPPUNIT_ASSERT_EQUAL((size_t)0, pmt_length(PMT_NIL));
+  CPPUNIT_ASSERT_THROW(pmt_length(s1), pmt_wrong_type);
+  CPPUNIT_ASSERT_THROW(pmt_length(pmt_from_double(42)), pmt_wrong_type);
+
   pmt_t c1 = pmt_cons(s1, PMT_NIL);
   CPPUNIT_ASSERT(pmt_is_pair(c1));
   CPPUNIT_ASSERT(!pmt_is_pair(s1));
   CPPUNIT_ASSERT_EQUAL(s1, pmt_car(c1));
   CPPUNIT_ASSERT_EQUAL(PMT_NIL, pmt_cdr(c1));
+  CPPUNIT_ASSERT_EQUAL((size_t) 1, pmt_length(c1));
 
   pmt_t c3 = pmt_cons(s3, PMT_NIL);
   pmt_t c2 = pmt_cons(s2, c3);
@@ -151,6 +156,8 @@
   CPPUNIT_ASSERT_EQUAL(c2, pmt_cdr(c1));
   pmt_set_car(c1, s3);
   CPPUNIT_ASSERT_EQUAL(s3, pmt_car(c1));
+  CPPUNIT_ASSERT_EQUAL((size_t)1, pmt_length(c3));
+  CPPUNIT_ASSERT_EQUAL((size_t)2, pmt_length(c2));
   
   CPPUNIT_ASSERT_THROW(pmt_cdr(PMT_NIL), pmt_wrong_type);
   CPPUNIT_ASSERT_THROW(pmt_car(PMT_NIL), pmt_wrong_type);
@@ -229,8 +236,6 @@
 void
 qa_pmt_prims::test_misc()
 {
-  CPPUNIT_ASSERT_THROW(pmt_length(PMT_NIL), pmt_wrong_type);
-
   pmt_t k0 = pmt_string_to_symbol("k0");
   pmt_t k1 = pmt_string_to_symbol("k1");
   pmt_t k2 = pmt_string_to_symbol("k2");





reply via email to

[Prev in Thread] Current Thread [Next in Thread]