|  | // Copyright 2023 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | //go:build wasip1 | 
|  |  | 
|  | package syscall_test | 
|  |  | 
|  | import ( | 
|  | "syscall" | 
|  | "testing" | 
|  | ) | 
|  |  | 
|  | var joinPathTests = [...]struct { | 
|  | dir, file, path string | 
|  | }{ | 
|  | 0:  {".", ".", "."}, | 
|  | 1:  {"./", "./", "./"}, | 
|  | 2:  {"././././", ".", "."}, | 
|  | 3:  {".", "./././", "./"}, | 
|  | 4:  {".", "a", "a"}, | 
|  | 5:  {".", "a/b", "a/b"}, | 
|  | 6:  {".", "..", ".."}, | 
|  | 7:  {".", "../", "../"}, | 
|  | 8:  {".", "../../", "../../"}, | 
|  | 9:  {".", "../..", "../.."}, | 
|  | 10: {".", "../..//..///", "../../../"}, | 
|  | 11: {"/", "/", "/"}, | 
|  | 12: {"/", "a", "/a"}, | 
|  | 13: {"/", "a/b", "/a/b"}, | 
|  | 14: {"/a", "b", "/a/b"}, | 
|  | 15: {"/", ".", "/"}, | 
|  | 16: {"/", "..", "/"}, | 
|  | 17: {"/", "../../", "/"}, | 
|  | 18: {"/", "/../a/b/c", "/a/b/c"}, | 
|  | 19: {"/", "/../a/b/c", "/a/b/c"}, | 
|  | 20: {"/", "./hello/world", "/hello/world"}, | 
|  | 21: {"/a", "../", "/"}, | 
|  | 22: {"/a/b/c", "..", "/a/b"}, | 
|  | 23: {"/a/b/c", "..///..///", "/a/"}, | 
|  | 24: {"/a/b/c", "..///..///..", "/"}, | 
|  | 25: {"/a/b/c", "..///..///..///..", "/"}, | 
|  | 26: {"/a/b/c", "..///..///..///..///..", "/"}, | 
|  | 27: {"/a/b/c/", "/d/e/f/", "/a/b/c/d/e/f/"}, | 
|  | 28: {"a/b/c/", ".", "a/b/c"}, | 
|  | 29: {"a/b/c/", "./d", "a/b/c/d"}, | 
|  | 30: {"a/b/c/", "./d/", "a/b/c/d/"}, | 
|  | 31: {"a/b/", "./c/d/", "a/b/c/d/"}, | 
|  | 32: {"../", "..", "../.."}, | 
|  | 33: {"a/b/c/d", "e/../..", "a/b/c"}, | 
|  | 34: {"a/b/c/d", "./e/../..", "a/b/c"}, | 
|  | 35: {"a/b/c/d", "./e/..//../../f/g//", "a/b/f/g/"}, | 
|  | 36: {"../../../", "a/../../b/c", "../../b/c"}, | 
|  | 37: {"/a/b/c", "/.././/hey!", "/a/b/hey!"}, | 
|  | } | 
|  |  | 
|  | func TestJoinPath(t *testing.T) { | 
|  | for _, test := range joinPathTests { | 
|  | t.Run("", func(t *testing.T) { | 
|  | path := syscall.JoinPath(test.dir, test.file) | 
|  | if path != test.path { | 
|  | t.Errorf("join(%q,%q): want=%q got=%q", test.dir, test.file, test.path, path) | 
|  | } | 
|  | }) | 
|  | } | 
|  | } | 
|  |  | 
|  | func BenchmarkJoinPath(b *testing.B) { | 
|  | for _, test := range joinPathTests { | 
|  | b.Run("", func(b *testing.B) { | 
|  | for i := 0; i < b.N; i++ { | 
|  | syscall.JoinPath(test.dir, test.file) | 
|  | } | 
|  | }) | 
|  | } | 
|  | } |