#include "test.h"
TEST_PREFIX("regex: ", "[regex]");
TEST("basic") {
Router<int> r({
{Regex("/user/\\d+"), 1},
{Regex("/user/\\d+a?"), 2},
});
CHECK_ROUTE("/user/1", 1);
CHECK_ROUTE("/user/1111", 1);
CHECK_ROUTE("/user", -1);
CHECK_ROUTE("/user/", -1);
CHECK_ROUTE("/user/a", -1);
CHECK_ROUTE("/user/123a", 2);
CHECK_ROUTE("/user/123/a", -1);
}
TEST("trailing-slash-indifferent") {
Router<int> r({
{Regex("/user/\\d+"), 1},
});
CHECK_ROUTE("/user/1", 1);
CHECK_ROUTE("/user/1/", 1);
CHECK_ROUTE("/user/1////", 1);
}
TEST("relevance") {
// regex must be the least relevant
Router<int> r({
{Regex("/foo/bar.*"), 10},
{"/foo/bar/...", 20},
{"/foo/bar/*", 30},
{"/foo/bar/baz", 40},
});
CHECK_ROUTE("/foo", -1);
CHECK_ROUTE("/foo/bar", 20);
CHECK_ROUTE("/foo/bar/abc", 30);
CHECK_ROUTE("/foo/bar/abc/def", 20);
CHECK_ROUTE("/foo/barabc/def", 10);
}
//TEST("benchmark") {
// Router<int> r_small({
// {Regex("/user/\\d+"), 1},
// {Regex("/user/\\d+a?"), 2},
// });
//
// uint64_t res = 0;
// for (int i = 0; i < 1000000; ++i) {
// res += r_small.route("/user/1111").value().value;
// }
//}