commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r4375 - gnuradio/branches/developers/eb/mb/mblock/src/


From: eb
Subject: [Commit-gnuradio] r4375 - gnuradio/branches/developers/eb/mb/mblock/src/lib
Date: Sun, 4 Feb 2007 22:52:47 -0700 (MST)

Author: eb
Date: 2007-02-04 22:52:47 -0700 (Sun, 04 Feb 2007)
New Revision: 4375

Modified:
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.h
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.h
Log:
work-in-progress on mblocks

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.cc   
2007-02-05 04:27:32 UTC (rev 4374)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.cc   
2007-02-05 05:52:47 UTC (rev 4375)
@@ -33,8 +33,8 @@
 {
 }
 
-mbe_not_implemented::mbe_not_implemented(const std::string &msg)
-  : mbe_base(0, "Not implemented: " + msg)
+mbe_not_implemented::mbe_not_implemented(mb_mblock *mb, const std::string &msg)
+  : mbe_base(mb, "Not implemented: " + msg)
 {
 }
 

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.h    
2007-02-05 04:27:32 UTC (rev 4374)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.h    
2007-02-05 05:52:47 UTC (rev 4375)
@@ -35,7 +35,7 @@
 class mbe_not_implemented : public mbe_base
 {
 public:
-  mbe_not_implemented(const std::string &msg);
+  mbe_not_implemented(mb_mblock *mb, const std::string &msg);
 };
 
 

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc 
2007-02-05 04:27:32 UTC (rev 4374)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc 
2007-02-05 05:52:47 UTC (rev 4375)
@@ -67,10 +67,12 @@
                            bool conjugated,
                            mb_port::port_type_t port_type)
 {
+#if 0
   if (port_type == mb_port::RELAY)
-    throw mbe_base(d_mb,
+    throw mbe_not_implemented(d_mb,
             "mb_block_impl::define_port: RELAY ports are not implemented: "
             + port_name);
+#endif
   
   if (port_is_defined(port_name))
     throw mbe_duplicate_port(d_mb, port_name);

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.cc 
2007-02-05 04:27:32 UTC (rev 4374)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.cc 
2007-02-05 05:52:47 UTC (rev 4375)
@@ -97,7 +97,7 @@
     return r;
 
   case mb_port::RELAY:
-    throw mbe_not_implemented("mb_port_simple::find_accepter(RELAY)");
+    throw mbe_not_implemented(0, "mb_port_simple::find_accepter(RELAY)");
 
   default:
     throw std::logic_error("Can't happen: mb_port_simple::find_accepter [3]");

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.cc 
2007-02-05 04:27:32 UTC (rev 4374)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.cc 
2007-02-05 05:52:47 UTC (rev 4375)
@@ -40,6 +40,8 @@
 static pmt_t s_p0   = pmt_intern("p0");
 static pmt_t s_p1   = pmt_intern("p1");
 static pmt_t s_p2   = pmt_intern("p2");
+static pmt_t s_e1   = pmt_intern("e1");
+static pmt_t s_r1   = pmt_intern("r1");
 
 static void
 define_protocol_classes()
@@ -49,7 +51,9 @@
                         pmt_cons(s_data, PMT_NIL));    // outgoing
 }
 
-// ----------------------------------------------------------------
+// ================================================================
+//                    test_simple_routing
+// ================================================================
 
 // sub-block for test_simple_routing
 
@@ -213,3 +217,138 @@
                           msg->data()));
 }
 
+// ================================================================
+//                    test_relay_routing
+// ================================================================
+
+// internal block for test_relay_routing
+
+class rr2 : public mb_mblock
+{
+  mb_port_sptr d_e1;
+
+public:
+  rr2();
+  ~rr2();
+  void init_fsm();
+};
+
+rr2::rr2()
+{
+  d_e1 = define_port("e1", "simple-send", false, mb_port::EXTERNAL);
+}
+
+rr2::~rr2(){}
+
+void
+rr2::init_fsm()
+{
+  // send two mesages via e1
+  pmt_t our_name = pmt_intern(fullname());
+  d_e1->send(s_data, pmt_list3(our_name, s_e1, pmt_from_long(0)));
+  d_e1->send(s_data, pmt_list3(our_name, s_e1, pmt_from_long(1)));
+}
+
+// ----------------------------------------------------------------
+
+// intermediate block for test_relay_routing
+
+class rr1 : public mb_mblock
+{
+  mb_port_sptr d_r1;
+
+public:
+  rr1();
+  ~rr1();
+};
+
+rr1::rr1()
+{
+  d_r1 = define_port("r1", "simple-send", false, mb_port::RELAY);
+
+  define_component("c0", mb_mblock_sptr(new rr2()));
+
+  connect("self", "r1", "c0", "e1");
+}
+
+rr1::~rr1(){}
+
+// ----------------------------------------------------------------
+
+// top-level container for test_relay_routing
+
+class rr0 : public mb_mblock
+{
+public:
+  rr0();
+  ~rr0();
+};
+
+rr0::rr0()
+{
+  define_component("c0", mb_mblock_sptr(new rr1()));
+  define_component("c1", mb_mblock_sptr(new rr1()));
+
+  connect("c0", "r1", "c1", "r1");
+}
+
+rr0::~rr0(){}
+
+
+/*
+ * This tests basic message routing using RELAY and EXTERNAL ports.
+ * It does not rely on the guts of the runtime being complete,
+ * which is good, because at the time this is being written, it isn't.
+ */
+void
+qa_mblock_send::test_relay_routing()
+{
+  mb_message_sptr msg;
+
+  mb_runtime_sptr rt = mb_make_runtime();
+  mb_mblock_sptr  top = mb_mblock_sptr(new rr0());
+  rt->run(top);
+
+  // Reach into the guts and see if the messages ended up where they should 
have
+
+  mb_mblock_sptr c0 = top->impl()->component("c0");
+  mb_mblock_sptr c0c0 = c0->impl()->component("c0");
+
+  mb_mblock_sptr c1 = top->impl()->component("c1");
+  mb_mblock_sptr c1c0 = c1->impl()->component("c0");
+
+  // c0c0 should have received
+  //   two message from c1c0 via its e1
+
+  msg = c0c0->impl()->msgq().get_highest_pri_msg();
+  CPPUNIT_ASSERT(msg);
+  std::cerr << msg->data() << std::endl;
+  CPPUNIT_ASSERT_EQUAL(s_e1, msg->port_id());
+  CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1/c0"), s_e1, 
pmt_from_long(0)),
+                          msg->data()));
+
+  msg = c0c0->impl()->msgq().get_highest_pri_msg();
+  CPPUNIT_ASSERT(msg);
+  std::cerr << msg->data() << std::endl;
+  CPPUNIT_ASSERT_EQUAL(s_e1, msg->port_id());
+  CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1/c0"), s_e1, 
pmt_from_long(1)),
+                          msg->data()));
+
+  // c1c0 should have received
+  //   two message from c0c0 via its e1
+
+  msg = c1c0->impl()->msgq().get_highest_pri_msg();
+  CPPUNIT_ASSERT(msg);
+  std::cerr << msg->data() << std::endl;
+  CPPUNIT_ASSERT_EQUAL(s_e1, msg->port_id());
+  CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_e1, 
pmt_from_long(0)),
+                          msg->data()));
+
+  msg = c1c0->impl()->msgq().get_highest_pri_msg();
+  CPPUNIT_ASSERT(msg);
+  std::cerr << msg->data() << std::endl;
+  CPPUNIT_ASSERT_EQUAL(s_e1, msg->port_id());
+  CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_e1, 
pmt_from_long(1)),
+                          msg->data()));
+}
+

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.h  
2007-02-05 04:27:32 UTC (rev 4374)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.h  
2007-02-05 05:52:47 UTC (rev 4375)
@@ -29,10 +29,12 @@
 
   CPPUNIT_TEST_SUITE(qa_mblock_send);
   CPPUNIT_TEST(test_simple_routing);
+  CPPUNIT_TEST(test_relay_routing);
   CPPUNIT_TEST_SUITE_END();
 
  private:
   void test_simple_routing();
+  void test_relay_routing();
 };
 
 #endif /* INCLUDED_QA_MBLOCK_SEND_H */





reply via email to

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