diff --git a/src/stdune/path.ml b/src/stdune/path.ml index d30e23e3..ec8fd4ad 100644 --- a/src/stdune/path.ml +++ b/src/stdune/path.ml @@ -206,7 +206,7 @@ module Local = struct let of_len = String.length of_ in let t_len = String.length t in (t_len = of_len && t = of_) || - (t_len >= of_len && t.[of_len] = '/' && String.is_prefix t ~prefix:of_) + (t_len > of_len && t.[of_len] = '/' && String.is_prefix t ~prefix:of_) let reach t ~from = let rec loop t from = diff --git a/test/unit-tests/path.mlt b/test/unit-tests/path.mlt index 3392b32b..974d8bf7 100644 --- a/test/unit-tests/path.mlt +++ b/test/unit-tests/path.mlt @@ -20,6 +20,71 @@ Path.(descendant (relative root "foo") ~of_:(relative root "bar")) - : Stdune.Path.t option = None |}] +Path.(is_descendant (r "foo") ~of_:(r "foo")) +[%%expect{| +- : bool = true +|}] + +Path.(is_descendant (r "foo") ~of_:(r "foo/")) +[%%expect{| +- : bool = true +|}] + +Path.(is_descendant (r "foo/") ~of_:(r "foo")) +[%%expect{| +- : bool = true +|}] + +Path.(is_descendant (r "foo") ~of_:(r "bar")) +[%%expect{| +- : bool = false +|}] + +Path.(is_descendant (r "foo") ~of_:(r "bar/")) +[%%expect{| +- : bool = false +|}] + +Path.(is_descendant (r "foo/") ~of_:(r "bar")) +[%%expect{| +- : bool = false +|}] + +Path.(is_descendant (r "glob/foo") ~of_:(r "glob")) +[%%expect{| +- : bool = true +|}] + +Path.(is_descendant (r "glob/foo") ~of_:(r "glob/")) +[%%expect{| +- : bool = true +|}] + +Path.(is_descendant (Path.absolute "/foo/bar") ~of_:(Path.absolute "/foo")) +[%%expect{| +- : bool = false +|}] + +Path.(is_descendant (Path.absolute "/foo/bar") ~of_:(Path.absolute "/foo/bar")) +[%%expect{| +- : bool = false +|}] + +Path.(is_descendant (Path.absolute "/foo/bar") ~of_:(Path.absolute "/foo/bar/")) +[%%expect{| +- : bool = false +|}] + +Path.(is_descendant (Path.absolute "/foo/bar/") ~of_:(Path.absolute "/foo/bar")) +[%%expect{| +- : bool = false +|}] + +Path.(is_descendant (Path.absolute "/foo/bar") ~of_:(Path.absolute "/")) +[%%expect{| +- : bool = false +|}] + Path.(descendant (r "foo") ~of_:(r "foo/")) [%%expect{| - : Stdune.Path.t option = Some foo