Convert control loop tests over to simulated event loop

This makes it so that we properly only use ShmEventLoop for running in
realtime on a robot.  Very nice.

Change-Id: I46b770b336f59e08cfaf28511b3bd5689f72fff1
diff --git a/aos/events/shm-event-loop_test.cc b/aos/events/shm-event-loop_test.cc
index 8d0f552..8af00f0 100644
--- a/aos/events/shm-event-loop_test.cc
+++ b/aos/events/shm-event-loop_test.cc
@@ -24,6 +24,8 @@
 
   void Run() override { CHECK_NOTNULL(primary_event_loop_)->Run(); }
 
+  void Exit() override { CHECK_NOTNULL(primary_event_loop_)->Exit(); }
+
   void SleepFor(::std::chrono::nanoseconds duration) override {
     ::std::this_thread::sleep_for(duration);
   }
@@ -80,10 +82,10 @@
   bool did_timer = false;
   bool did_watcher = false;
 
-  auto timer = loop->AddTimer([&did_timer, &loop]() {
+  auto timer = loop->AddTimer([&did_timer, &loop, &factory]() {
     EXPECT_TRUE(IsRealtime());
     did_timer = true;
-    loop->Exit();
+    factory.Exit();
   });
 
   loop->MakeWatcher("/test", [&did_watcher](const TestMessage &) {
@@ -118,7 +120,7 @@
   constexpr chrono::milliseconds kOffset = chrono::milliseconds(400);
 
   loop1->AddPhasedLoop(
-      [&times, &loop1, &kOffset](int count) {
+      [&times, &loop1, &kOffset, &factory](int count) {
         const ::aos::monotonic_clock::time_point monotonic_now =
             loop1->monotonic_now();
 
@@ -143,7 +145,7 @@
 
         times.push_back(loop1->monotonic_now());
         if (times.size() == 2) {
-          loop1->Exit();
+          factory.Exit();
         }
 
         // Now, add a large delay.  This should push us up to 3 cycles.