nodejs_path 0.0.8

Port path module (and tests) of nodejs to rust using the same algorithms.
Documentation
use criterion::{criterion_group, criterion_main, Criterion};
use nodejs_path::{posix};

fn criterion_benchmark(c: &mut Criterion) {
    c.bench_function("join_impl", |b| {
        let join_tests = [
            (vec![".", "x/b", "..", "/b/c.js"], "x/b/c.js"),
            (vec![], "."),
            (vec!["/.", "x/b", "..", "/b/c.js"], "/x/b/c.js"),
            (vec!["/foo", "../../../bar"], "/bar"),
            (vec!["foo", "../../../bar"], "../../bar"),
            (vec!["foo/", "../../../bar"], "../../bar"),
            (vec!["foo/x", "../../../bar"], "../bar"),
            (vec!["foo/x", "./bar"], "foo/x/bar"),
            (vec!["foo/x/", "./bar"], "foo/x/bar"),
            (vec!["foo/x/", ".", "bar"], "foo/x/bar"),
            (vec!["./"], "./"),
            (vec![".", "./"], "./"),
            (vec![".", ".", "."], "."),
            (vec![".", "./", "."], "."),
            (vec![".", "/./", "."], "."),
            (vec![".", "/////./", "."], "."),
            (vec!["."], "."),
            (vec!["", "."], "."),
            (vec!["", "foo"], "foo"),
            (vec!["foo", "/bar"], "foo/bar"),
            (vec!["", "/foo"], "/foo"),
            (vec!["", "", "/foo"], "/foo"),
            (vec!["", "", "foo"], "foo"),
            (vec!["foo", ""], "foo"),
            (vec!["foo/", ""], "foo/"),
            (vec!["foo", "", "/bar"], "foo/bar"),
            (vec!["./", "..", "/foo"], "../foo"),
            (vec!["./", "..", "..", "/foo"], "../../foo"),
            (vec![".", "..", "..", "/foo"], "../../foo"),
            (vec!["", "..", "..", "/foo"], "../../foo"),
            (vec!["/"], "/"),
            (vec!["/", "."], "/"),
            (vec!["/", ".."], "/"),
            (vec!["/", "..", ".."], "/"),
            (vec![""], "."),
            (vec!["", ""], "."),
            (vec![" /foo"], " /foo"),
            (vec![" ", "foo"], " /foo"),
            (vec![" ", "."], " "),
            (vec![" ", "/"], " /"),
            (vec![" ", ""], " "),
            (vec!["/", "foo"], "/foo"),
            (vec!["/", "/foo"], "/foo"),
            (vec!["/", "//foo"], "/foo"),
            (vec!["/", "", "/foo"], "/foo"),
            (vec!["", "/", "foo"], "/foo"),
            (vec!["", "/", "/foo"], "/foo"),
        ];
        b.iter(|| {
            for join_seq in &join_tests {
                let _res = posix::join_impl(&join_seq.0);
            }
        })
    });
    c.bench_function("cwd", |b| {
        b.iter(|| {
          posix::resolve!();
      })
    });
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);