utest NEW for ly_value_prefix_next function
diff --git a/tests/utests/basic/test_common.c b/tests/utests/basic/test_common.c
index 41a1a2f..5ca66fe 100644
--- a/tests/utests/basic/test_common.c
+++ b/tests/utests/basic/test_common.c
@@ -259,6 +259,121 @@
     assert_string_equal(errmsg, "Predicate is incomplete.");
 }
 
+static void
+test_value_prefix_next(void **UNUSED(state))
+{
+    const char *next;
+    ly_bool is_prefix;
+
+    assert_int_equal(0, ly_value_prefix_next(NULL, NULL, &is_prefix, &next));
+    assert_int_equal(0, ly_value_prefix_next("", NULL, &is_prefix, &next));
+
+    /* prefix */
+    next = "pref:";
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(1, is_prefix);
+
+    /* no-prefix */
+    next = "node";
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(0, is_prefix);
+
+    /* no-prefix */
+    next = "::::";
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(0, is_prefix);
+
+    /* no-prefix */
+    next = "//a/:";
+    assert_int_equal(5, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(0, is_prefix);
+
+    /* no-prefix */
+    next = "//a//";
+    assert_int_equal(5, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(0, is_prefix);
+
+    /* prefix, prefix */
+    next = "pref1:pref2:";
+    assert_int_equal(5, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "pref2:");
+    assert_int_equal(1, is_prefix);
+    assert_int_equal(5, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(1, is_prefix);
+
+    /* prefix, no-prefix */
+    next = "pref:node";
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "node");
+    assert_int_equal(1, is_prefix);
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(0, is_prefix);
+
+    /* no-prefix, prefix */
+    next = "/pref:";
+    assert_int_equal(1, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "pref:");
+    assert_int_equal(0, is_prefix);
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(1, is_prefix);
+
+    /* no-prefix, prefix */
+    next = "//pref:";
+    assert_int_equal(2, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "pref:");
+    assert_int_equal(0, is_prefix);
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(1, is_prefix);
+
+    /* no-prefix, prefix, no-prefix */
+    next =  "/pref:node";
+    assert_int_equal(1, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "pref:node");
+    assert_int_equal(0, is_prefix);
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "node");
+    assert_int_equal(1, is_prefix);
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(0, is_prefix);
+
+    /* prefix, no-prefix, prefix */
+    next =  "pref:node pref:";
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "node pref:");
+    assert_int_equal(1, is_prefix);
+    assert_int_equal(5, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "pref:");
+    assert_int_equal(0, is_prefix);
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(1, is_prefix);
+
+    /* prefix, no-prefix, prefix, no-prefix */
+    next = "pref:node /pref:node";
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "node /pref:node");
+    assert_int_equal(1, is_prefix);
+    assert_int_equal(6, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "pref:node");
+    assert_int_equal(0, is_prefix);
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_string_equal(next, "node");
+    assert_int_equal(1, is_prefix);
+    assert_int_equal(4, ly_value_prefix_next(next, NULL, &is_prefix, &next));
+    assert_null(next);
+    assert_int_equal(0, is_prefix);
+}
+
 int
 main(void)
 {
@@ -268,6 +383,7 @@
         UTEST(test_parse_uint),
         UTEST(test_parse_nodeid),
         UTEST(test_parse_instance_predicate),
+        UTEST(test_value_prefix_next),
     };
 
     return cmocka_run_group_tests(tests, NULL, NULL);