TEST(ProcessorRouterTest, DiamondRouting) { ProcessorRouter pr; TestProcessor tp0(1,2); TestProcessor tp1(1,1); TestProcessor tp2(1,1); TestProcessor tp3(2,1); pr.addProcessor(&tp2); pr.addProcessor(&tp1); pr.addProcessor(&tp3); pr.addProcessor(&tp0); tp3.plug(&tp1); tp3.plug(&tp2, 1); tp1.plug(&tp0); tp2.plug(tp0.output(1)); pr.process(); EXPECT_TRUE(tp0.did_process()); EXPECT_TRUE(tp0.dependencies_handled()); EXPECT_TRUE(tp1.did_process()); EXPECT_TRUE(tp1.dependencies_handled()); EXPECT_TRUE(tp2.did_process()); EXPECT_TRUE(tp2.dependencies_handled()); EXPECT_TRUE(tp2.did_process()); EXPECT_TRUE(tp2.dependencies_handled()); }
TEST(ProcessorRouterTest, SingleRouting) { ProcessorRouter pr; TestProcessor tp; pr.addProcessor(&tp); pr.process(); EXPECT_TRUE(tp.did_process()); EXPECT_TRUE(tp.dependencies_handled()); }
TEST(ProcessorRouterTest, LinearRouting) { ProcessorRouter pr; TestProcessor tp0(1,1); TestProcessor tp1(1,1); TestProcessor tp2(1,1); pr.addProcessor(&tp2); pr.addProcessor(&tp1); pr.addProcessor(&tp0); tp2.plug(&tp1); tp1.plug(&tp0); pr.process(); EXPECT_TRUE(tp0.did_process()); EXPECT_TRUE(tp0.dependencies_handled()); EXPECT_TRUE(tp1.did_process()); EXPECT_TRUE(tp1.dependencies_handled()); EXPECT_TRUE(tp2.did_process()); EXPECT_TRUE(tp2.dependencies_handled()); }
Processor* HelmModule::createTempoSyncSwitch(std::string name, Processor* frequency, Processor* bps, bool poly) { static const Value dotted_ratio(2.0 / 3.0); static const Value triplet_ratio(3.0 / 2.0); ProcessorRouter* owner = poly ? getPolyRouter() : getMonoRouter(); Processor* tempo = nullptr; if (poly) tempo = createPolyModControl(name + "_tempo", 6, false); else tempo = createMonoModControl(name + "_tempo", 6, false); Switch* choose_tempo = new Switch(); choose_tempo->plug(tempo, Switch::kSource); choose_tempo->setControlRate(frequency->isControlRate()); for (int i = 0; i < sizeof(synced_freq_ratios) / sizeof(Value); ++i) choose_tempo->plugNext(&synced_freq_ratios[i]); Switch* choose_modifier = new Switch(); Value* sync = new Value(1); choose_modifier->plug(sync, Switch::kSource); choose_modifier->plugNext(&utils::value_one); choose_modifier->plugNext(&utils::value_one); choose_modifier->plugNext(&dotted_ratio); choose_modifier->plugNext(&triplet_ratio); Multiply* modified_tempo = new Multiply(); modified_tempo->setControlRate(frequency->isControlRate()); modified_tempo->plug(choose_tempo, 0); modified_tempo->plug(choose_modifier, 1); Multiply* tempo_frequency = new Multiply(); tempo_frequency->setControlRate(frequency->isControlRate()); tempo_frequency->plug(modified_tempo, 0); tempo_frequency->plug(bps, 1); owner->addProcessor(choose_modifier); owner->addProcessor(choose_tempo); owner->addProcessor(modified_tempo); owner->addProcessor(tempo_frequency); Switch* choose_frequency = new Switch(); choose_frequency->setControlRate(frequency->isControlRate()); choose_frequency->plug(sync, Switch::kSource); choose_frequency->plugNext(frequency); choose_frequency->plugNext(tempo_frequency); choose_frequency->plugNext(tempo_frequency); choose_frequency->plugNext(tempo_frequency); owner->addProcessor(choose_frequency); controls_[name + "_sync"] = sync; return choose_frequency; }