template <class Parser> void check_repeat_a (Parser const & parser) { using range::empty; using range::first; using range::drop; { std::string r ("aa"); auto result = parse (parser, r); BOOST_CHECK (success (result)); auto o = output (result); BOOST_CHECK (!empty (o)); BOOST_CHECK (!empty (drop (o))); BOOST_CHECK (empty (drop (drop (o)))); BOOST_CHECK_EQUAL (first (o), 'a'); BOOST_CHECK_EQUAL (first (drop (o)), 'a'); BOOST_CHECK (empty (rest (result))); } { std::string r ("ab"); auto result = parse (parser, r); BOOST_CHECK (success (result)); auto o = output (result); BOOST_CHECK (!empty (o)); BOOST_CHECK (empty (drop (o))); BOOST_CHECK_EQUAL (first (o), 'a'); BOOST_CHECK_EQUAL (first (rest (result)), 'b'); } { std::string r ("b"); auto result = parse (parser, r); BOOST_CHECK (success (result)); auto o = output (result); BOOST_CHECK (empty (o)); BOOST_CHECK_EQUAL (first (rest (result)), 'b'); } }