src/code/print.h \
src/conf/msg.h \
src/conf/opt.h \
+ src/conf/ver_to_vernum.h \
src/conf/warn.h \
src/adfa/action.h \
src/adfa/adfa.h \
src/code/print.cc \
src/conf/msg.cc \
src/conf/opt.cc \
+ src/conf/ver_to_vernum.cc \
src/conf/warn.cc \
src/nfa/dump.cc \
src/nfa/estimate_size.cc \
src/test/s_to_n32_unsafe/test.cc \
src/util/s_to_n32_unsafe.cc
+TST_VER_TO_VERNUM = testvertovernum
+testvertovernum_SOURCES = \
+ src/test/ver_to_vernum/test.cc \
+ src/conf/ver_to_vernum.cc
+
check_PROGRAMS = \
$(TST_RANGE) \
- $(TST_S_TO_N32_UNSAFE)
+ $(TST_S_TO_N32_UNSAFE) \
+ $(TST_VER_TO_VERNUM)
TESTS = $(TST_SUITE) $(check_PROGRAMS)
#include "config.h"
#include "src/conf/msg.h"
+#include "src/conf/ver_to_vernum.h"
extern const char *help; // autogenerated
void vernum ()
{
- std::string vernum (PACKAGE_VERSION);
- std::string parts[3];
- unsigned p = 0;
-
- for (unsigned i = 0; p < 3 && i < vernum.length (); i++)
- {
- if (vernum[i] == '.')
- p++;
- else
- parts[p].push_back (vernum[i]);
- }
-
- for (p = 0; p < 3; p++)
- while (parts[p].length () < 2)
- parts[p].insert (0, 1, '0');
-
- printf ("%s%s%s\n", parts[0].c_str (), parts[1].c_str (), parts[2].c_str ());
+ printf ("%s\n", ver_to_vernum(PACKAGE_VERSION).c_str ());
}
void version ()
--- /dev/null
+#include <stdio.h> /* fprintf() */
+#include <string>
+
+#include "config.h"
+#include "src/conf/ver_to_vernum.h"
+
+namespace re2c {
+
+std::string ver_to_vernum(const std::string & ver)
+{
+ std::string parts[3];
+ unsigned p = 0;
+
+ for (unsigned i = 0; p < 3 && i < ver.length (); i++)
+ {
+ if (ver[i] == '.')
+ p++;
+ else
+ parts[p].push_back (ver[i]);
+ }
+
+ for (p = 0; p < 3; p++)
+ while (parts[p].length () < 2)
+ parts[p].insert (0, 1, '0');
+
+ return parts[0] + parts[1] + parts[2];
+}
+
+} // namespace re2c
--- /dev/null
+#ifndef _RE2C_CONF_VER_
+#define _RE2C_CONF_VER_
+
+#include <string>
+
+namespace re2c {
+
+std::string ver_to_vernum(const std::string & ver);
+
+} // namespace re2c
+
+#endif // _RE2C_CONF_VER_
--- /dev/null
+#include <stdio.h> /* fprintf() */
+#include <string>
+#include "src/conf/ver_to_vernum.h" /* re2c::ver_to_vernum() */
+
+namespace re2c_test {
+
+struct examples_t {
+ std::string in;
+ std::string expected;
+};
+
+static const examples_t EXAMPLES[] =
+{
+ { "0.14", "001400", },
+ { "0.14.1", "001401", },
+ { "1", "010000", },
+ { "1.1", "010100", },
+ // Those used to exist. Should be supported?
+ //{ "1.1.dev", "010100", },
+ { "1.1.1", "010101", },
+ { "1.1.1.1", "010101", },
+};
+
+int test ()
+{
+ int failures = 0;
+
+ for (size_t i = 0; i < sizeof (EXAMPLES) / sizeof (EXAMPLES[0]); ++i)
+ {
+ const examples_t & e = EXAMPLES[i];
+
+ std::string got = re2c::ver_to_vernum (e.in);
+ if (got != e.expected)
+ {
+ ++failures;
+ fprintf (stderr, "FAIL: re2c::ver_to_vernum('%s') = '%s', expected '%s'\n",
+ e.in.c_str(), got.c_str(), e.expected.c_str());
+ }
+ else
+ {
+ fprintf (stderr, "PASS: re2c::ver_to_vernum('%s') = '%s\n", e.in.c_str(), got.c_str());
+ }
+ }
+
+ return failures;
+}
+
+} // namespace re2c_test
+
+int main ()
+{
+ return re2c_test::test ();
+}