// Very basic test; more significant testing will be done by end to end tests. TEST(TestIntermediate, Writer) { using namespace IronAutomata::Intermediate; stringstream s; { Automata a; node_p node = a.start_node() = boost::make_shared<Node>(); output_p output = node->first_output() = boost::make_shared<Output>(); output->content().push_back('7'); output->content().push_back('3'); output_p other_output = output->next_output() = boost::make_shared<Output>(); other_output->content().push_back('9'); node->edges().push_back(Edge()); Edge& edge = node->edges().back(); node_p other_node = edge.target() = boost::make_shared<Node>(); edge.add('5'); write_automata(a, s); s.seekp(0); } IronAutomata::ostream_logger logger(cout); AutomataReader reader(logger); bool success = reader.read_from_istream(s); EXPECT_TRUE(success); EXPECT_TRUE(reader.clean()); EXPECT_TRUE(reader.success()); Automata a = reader.automata(); EXPECT_FALSE(a.no_advance_no_output()); ASSERT_TRUE(bool(a.start_node())); node_p node = a.start_node(); EXPECT_TRUE(node->advance_on_default()); ASSERT_TRUE(bool(node->first_output())); ASSERT_EQ(1UL, node->edges().size()); EXPECT_FALSE(node->default_target()); output_p output = node->first_output(); ASSERT_EQ(2UL, output->content().size()); EXPECT_EQ('7', output->content()[0]); EXPECT_EQ('3', output->content()[1]); ASSERT_TRUE(bool(output->next_output())); output = output->next_output(); ASSERT_EQ(1UL, output->content().size()); EXPECT_EQ('9', output->content()[0]); EXPECT_FALSE(output->next_output()); Edge& edge = node->edges().front(); EXPECT_TRUE(edge.advance()); ASSERT_TRUE(bool(edge.target())); ASSERT_EQ(1UL, edge.size()); EXPECT_EQ('5', *edge.begin()); node = edge.target(); EXPECT_FALSE(node->default_target()); EXPECT_TRUE(node->edges().empty()); EXPECT_TRUE(node->advance_on_default()); EXPECT_FALSE(node->first_output()); }