diff --git a/benchmark/path/basename-posix.js b/benchmark/path/basename-posix.js new file mode 100644 index 00000000000000..d4ea072b57c52d --- /dev/null +++ b/benchmark/path/basename-posix.js @@ -0,0 +1,43 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + pathext: [ + '', + '/', + '/foo', + '/foo/.bar.baz', + ['/foo/.bar.baz', '.baz'].join('|'), + 'foo', + 'foo/bar.', + ['foo/bar.', '.'].join('|'), + '/foo/bar/baz/asdf/quux.html', + ['/foo/bar/baz/asdf/quux.html', '.html'].join('|') + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.posix; + var input = '' + conf.pathext; + var ext; + var extIdx = input.indexOf('|'); + if (extIdx !== -1) { + ext = input.slice(extIdx + 1); + input = input.slice(0, extIdx); + } + + // Force optimization before starting the benchmark + p.basename(input, ext); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.basename)'); + p.basename(input, ext); + + bench.start(); + for (var i = 0; i < n; i++) { + p.basename(input, ext); + } + bench.end(n); +} diff --git a/benchmark/path/basename-win32.js b/benchmark/path/basename-win32.js new file mode 100644 index 00000000000000..08938a20502cc6 --- /dev/null +++ b/benchmark/path/basename-win32.js @@ -0,0 +1,43 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + pathext: [ + '', + 'C:\\', + 'C:\\foo', + 'D:\\foo\\.bar.baz', + ['E:\\foo\\.bar.baz','.baz'].join('|'), + 'foo', + 'foo\\bar.', + ['foo\\bar.', '.'].join('|'), + '\\foo\\bar\\baz\\asdf\\quux.html', + ['\\foo\\bar\\baz\\asdf\\quux.html', '.html'].join('|') + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var input = '' + conf.pathext; + var ext; + var extIdx = input.indexOf('|'); + if (extIdx !== -1) { + ext = input.slice(extIdx + 1); + input = input.slice(0, extIdx); + } + + // Force optimization before starting the benchmark + p.basename(input, ext); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.basename)'); + p.basename(input, ext); + + bench.start(); + for (var i = 0; i < n; i++) { + p.basename(input, ext); + } + bench.end(n); +} diff --git a/benchmark/path/basename.js b/benchmark/path/basename.js deleted file mode 100644 index 57d9492746b32c..00000000000000 --- a/benchmark/path/basename.js +++ /dev/null @@ -1,26 +0,0 @@ -var common = require('../common.js'); -var path = require('path'); -var v8 = require('v8'); - -var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e6], -}); - -function main(conf) { - var n = +conf.n; - var p = path[conf.type]; - - // Force optimization before starting the benchmark - p.basename('/foo/bar/baz/asdf/quux.html'); - v8.setFlagsFromString('--allow_natives_syntax'); - eval('%OptimizeFunctionOnNextCall(p.basename)'); - p.basename('/foo/bar/baz/asdf/quux.html'); - - bench.start(); - for (var i = 0; i < n; i++) { - p.basename('/foo/bar/baz/asdf/quux.html'); - p.basename('/foo/bar/baz/asdf/quux.html', '.html'); - } - bench.end(n); -} diff --git a/benchmark/path/dirname.js b/benchmark/path/dirname-posix.js similarity index 62% rename from benchmark/path/dirname.js rename to benchmark/path/dirname-posix.js index e95adf28811a4e..037ac636708793 100644 --- a/benchmark/path/dirname.js +++ b/benchmark/path/dirname-posix.js @@ -3,23 +3,32 @@ var path = require('path'); var v8 = require('v8'); var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e6], + path: [ + '', + '/', + '/foo', + '/foo/bar', + 'foo', + 'foo/bar', + '/foo/bar/baz/asdf/quux' + ], + n: [1e6] }); function main(conf) { var n = +conf.n; - var p = path[conf.type]; + var p = path.posix; + var input = '' + conf.path; // Force optimization before starting the benchmark - p.dirname('/foo/bar/baz/asdf/quux'); + p.dirname(input); v8.setFlagsFromString('--allow_natives_syntax'); eval('%OptimizeFunctionOnNextCall(p.dirname)'); - p.dirname('/foo/bar/baz/asdf/quux'); + p.dirname(input); bench.start(); for (var i = 0; i < n; i++) { - p.dirname('/foo/bar/baz/asdf/quux'); + p.dirname(input); } bench.end(n); } diff --git a/benchmark/path/dirname-win32.js b/benchmark/path/dirname-win32.js new file mode 100644 index 00000000000000..cd8c190e978cd2 --- /dev/null +++ b/benchmark/path/dirname-win32.js @@ -0,0 +1,34 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + path: [ + '', + '\\', + '\\foo', + 'C:\\foo\\bar', + 'foo', + 'foo\\bar', + 'D:\\foo\\bar\\baz\\asdf\\quux' + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var input = '' + conf.path; + + // Force optimization before starting the benchmark + p.dirname(input); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.dirname)'); + p.dirname(input); + + bench.start(); + for (var i = 0; i < n; i++) { + p.dirname(input); + } + bench.end(n); +} diff --git a/benchmark/path/extname-posix.js b/benchmark/path/extname-posix.js new file mode 100644 index 00000000000000..41a4a778834b51 --- /dev/null +++ b/benchmark/path/extname-posix.js @@ -0,0 +1,37 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + path: [ + '', + '/', + '/foo', + 'foo/.bar.baz', + 'index.html', + 'index', + 'foo/bar/..baz.quux', + 'foo/bar/...baz.quux', + '/foo/bar/baz/asdf/quux', + '/foo/bar/baz/asdf/quux.foobarbazasdfquux' + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.posix; + var input = '' + conf.path; + + // Force optimization before starting the benchmark + p.extname(input); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.extname)'); + p.extname(input); + + bench.start(); + for (var i = 0; i < n; i++) { + p.extname(input); + } + bench.end(n); +} diff --git a/benchmark/path/extname-win32.js b/benchmark/path/extname-win32.js new file mode 100644 index 00000000000000..fcc1af933749ed --- /dev/null +++ b/benchmark/path/extname-win32.js @@ -0,0 +1,37 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + path: [ + '', + '\\', + 'C:\\foo', + 'foo\\.bar.baz', + 'index.html', + 'index', + 'foo\\bar\\..baz.quux', + 'foo\\bar\\...baz.quux', + 'D:\\foo\\bar\\baz\\asdf\\quux', + '\\foo\\bar\\baz\\asdf\\quux.foobarbazasdfquux' + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var input = '' + conf.path; + + // Force optimization before starting the benchmark + p.extname(input); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.extname)'); + p.extname(input); + + bench.start(); + for (var i = 0; i < n; i++) { + p.extname(input); + } + bench.end(n); +} diff --git a/benchmark/path/format.js b/benchmark/path/format-posix.js similarity index 51% rename from benchmark/path/format.js rename to benchmark/path/format-posix.js index bc77f888116963..6dce6d3fae733a 100644 --- a/benchmark/path/format.js +++ b/benchmark/path/format-posix.js @@ -3,36 +3,33 @@ var path = require('path'); var v8 = require('v8'); var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e7], + props: [ + ['/', '/home/user/dir', 'index.html', '.html', 'index'].join('|') + ], + n: [1e7] }); function main(conf) { var n = +conf.n; - var p = path[conf.type]; - var test = conf.type === 'win32' ? { - root: 'C:\\', - dir: 'C:\\path\\dir', - base: 'index.html', - ext: '.html', - name: 'index' - } : { - root : '/', - dir : '/home/user/dir', - base : 'index.html', - ext : '.html', - name : 'index' + var p = path.posix; + var props = ('' + conf.props).split('|'); + var obj = { + root: props[0] || '', + dir: props[1] || '', + base: props[2] || '', + ext: props[3] || '', + name: props[4] || '', }; // Force optimization before starting the benchmark - p.format(test); + p.format(obj); v8.setFlagsFromString('--allow_natives_syntax'); eval('%OptimizeFunctionOnNextCall(p.format)'); - p.format(test); + p.format(obj); bench.start(); for (var i = 0; i < n; i++) { - p.format(test); + p.format(obj); } bench.end(n); } diff --git a/benchmark/path/format-win32.js b/benchmark/path/format-win32.js new file mode 100644 index 00000000000000..598393b836b9fb --- /dev/null +++ b/benchmark/path/format-win32.js @@ -0,0 +1,35 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + props: [ + ['C:\\', 'C:\\path\\dir', 'index.html', '.html', 'index'].join('|') + ], + n: [1e7] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var props = ('' + conf.props).split('|'); + var obj = { + root: props[0] || '', + dir: props[1] || '', + base: props[2] || '', + ext: props[3] || '', + name: props[4] || '', + }; + + // Force optimization before starting the benchmark + p.format(obj); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.format)'); + p.format(obj); + + bench.start(); + for (var i = 0; i < n; i++) { + p.format(obj); + } + bench.end(n); +} diff --git a/benchmark/path/extname.js b/benchmark/path/isAbsolute-posix.js similarity index 57% rename from benchmark/path/extname.js rename to benchmark/path/isAbsolute-posix.js index c655ee7e3e160a..4f8d89e654425d 100644 --- a/benchmark/path/extname.js +++ b/benchmark/path/isAbsolute-posix.js @@ -3,24 +3,30 @@ var path = require('path'); var v8 = require('v8'); var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e6], + path: [ + '', + '.', + '/foo/bar', + '/baz/..', + 'bar/baz' + ], + n: [1e6] }); function main(conf) { var n = +conf.n; - var p = path[conf.type]; + var p = path.posix; + var input = '' + conf.path; // Force optimization before starting the benchmark - p.extname('index.html'); + p.isAbsolute(input); v8.setFlagsFromString('--allow_natives_syntax'); - eval('%OptimizeFunctionOnNextCall(p.extname)'); - p.extname('index.html'); + eval('%OptimizeFunctionOnNextCall(p.isAbsolute)'); + p.isAbsolute(input); bench.start(); for (var i = 0; i < n; i++) { - p.extname('index.html'); - p.extname('index'); + p.isAbsolute(input); } bench.end(n); } diff --git a/benchmark/path/isAbsolute-win32.js b/benchmark/path/isAbsolute-win32.js new file mode 100644 index 00000000000000..c6771a0e7d7b1e --- /dev/null +++ b/benchmark/path/isAbsolute-win32.js @@ -0,0 +1,33 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + path: [ + '', + '.', + '//server', + 'C:\\baz\\..', + 'C:baz\\..', + 'bar\\baz' + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var input = '' + conf.path; + + // Force optimization before starting the benchmark + p.isAbsolute(input); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.isAbsolute)'); + p.isAbsolute(input); + + bench.start(); + for (var i = 0; i < n; i++) { + p.isAbsolute(input); + } + bench.end(n); +} diff --git a/benchmark/path/isAbsolute.js b/benchmark/path/isAbsolute.js deleted file mode 100644 index d4c79b99cdbeb7..00000000000000 --- a/benchmark/path/isAbsolute.js +++ /dev/null @@ -1,34 +0,0 @@ -var common = require('../common.js'); -var path = require('path'); -var v8 = require('v8'); - -var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e6], -}); - -function main(conf) { - var n = +conf.n; - var p = path[conf.type]; - var tests = conf.type === 'win32' - ? ['//server', 'C:\\baz\\..', 'bar\\baz', '.'] - : ['/foo/bar', '/baz/..', 'bar/baz', '.']; - - // Force optimization before starting the benchmark - p.isAbsolute(tests[0]); - v8.setFlagsFromString('--allow_natives_syntax'); - eval('%OptimizeFunctionOnNextCall(p.isAbsolute)'); - p.isAbsolute(tests[0]); - - bench.start(); - for (var i = 0; i < n; i++) { - runTests(p, tests); - } - bench.end(n); -} - -function runTests(p, tests) { - for (var i = 0; i < tests.length; i++) { - p.isAbsolute(tests[i]); - } -} diff --git a/benchmark/path/join.js b/benchmark/path/join-posix.js similarity index 62% rename from benchmark/path/join.js rename to benchmark/path/join-posix.js index 58f4dc3e1e9e44..4b8bb924a2c006 100644 --- a/benchmark/path/join.js +++ b/benchmark/path/join-posix.js @@ -3,23 +3,26 @@ var path = require('path'); var v8 = require('v8'); var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e6], + paths: [ + ['/foo', 'bar', '', 'baz/asdf', 'quux', '..'].join('|') + ], + n: [1e6] }); function main(conf) { var n = +conf.n; - var p = path[conf.type]; + var p = path.posix; + var args = ('' + conf.paths).split('|'); // Force optimization before starting the benchmark - p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..'); + p.join.apply(null, args); v8.setFlagsFromString('--allow_natives_syntax'); eval('%OptimizeFunctionOnNextCall(p.join)'); - p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..'); + p.join.apply(null, args); bench.start(); for (var i = 0; i < n; i++) { - p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..'); + p.join.apply(null, args); } bench.end(n); } diff --git a/benchmark/path/join-win32.js b/benchmark/path/join-win32.js new file mode 100644 index 00000000000000..7309d1f91c773d --- /dev/null +++ b/benchmark/path/join-win32.js @@ -0,0 +1,28 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + paths: [ + ['C:\\foo', 'bar', '', 'baz\\asdf', 'quux', '..'].join('|') + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var args = ('' + conf.paths).split('|'); + + // Force optimization before starting the benchmark + p.join.apply(null, args); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.join)'); + p.join.apply(null, args); + + bench.start(); + for (var i = 0; i < n; i++) { + p.join.apply(null, args); + } + bench.end(n); +} diff --git a/benchmark/path/makeLong-win32.js b/benchmark/path/makeLong-win32.js new file mode 100644 index 00000000000000..c0b0ac124ed2b0 --- /dev/null +++ b/benchmark/path/makeLong-win32.js @@ -0,0 +1,31 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + path: [ + 'foo\\bar', + 'C:\\foo', + '\\\\foo\\bar', + '\\\\?\\foo' + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var input = '' + conf.path; + + // Force optimization before starting the benchmark + p._makeLong(input); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p._makeLong)'); + p._makeLong(input); + + bench.start(); + for (var i = 0; i < n; i++) { + p._makeLong(input); + } + bench.end(n); +} diff --git a/benchmark/path/normalize.js b/benchmark/path/normalize-posix.js similarity index 63% rename from benchmark/path/normalize.js rename to benchmark/path/normalize-posix.js index 6f7f05e4f9e1c8..87cf903b8c897b 100644 --- a/benchmark/path/normalize.js +++ b/benchmark/path/normalize-posix.js @@ -3,23 +3,31 @@ var path = require('path'); var v8 = require('v8'); var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e6], + path: [ + '', + '.', + '/../', + '/foo', + '/foo/bar', + '/foo/bar//baz/asdf/quux/..' + ], + n: [1e6] }); function main(conf) { var n = +conf.n; - var p = path[conf.type]; + var p = path.posix; + var input = '' + conf.path; // Force optimization before starting the benchmark - p.normalize('/foo/bar//baz/asdf/quux/..'); + p.normalize(input); v8.setFlagsFromString('--allow_natives_syntax'); eval('%OptimizeFunctionOnNextCall(p.normalize)'); - p.normalize('/foo/bar//baz/asdf/quux/..'); + p.normalize(input); bench.start(); for (var i = 0; i < n; i++) { - p.normalize('/foo/bar//baz/asdf/quux/..'); + p.normalize(input); } bench.end(n); } diff --git a/benchmark/path/normalize-win32.js b/benchmark/path/normalize-win32.js new file mode 100644 index 00000000000000..50f1e759f72f74 --- /dev/null +++ b/benchmark/path/normalize-win32.js @@ -0,0 +1,33 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + path: [ + '', + '.', + 'C:\\..\\', + 'C:\\foo', + 'C:\\foo\\bar', + 'C:\\foo\\bar\\\\baz\\asdf\\quux\\..' + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var input = '' + conf.path; + + // Force optimization before starting the benchmark + p.normalize(input); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.normalize)'); + p.normalize(input); + + bench.start(); + for (var i = 0; i < n; i++) { + p.normalize(input); + } + bench.end(n); +} diff --git a/benchmark/path/parse.js b/benchmark/path/parse-posix.js similarity index 62% rename from benchmark/path/parse.js rename to benchmark/path/parse-posix.js index f3fbb2a1f5c98f..97d84e52754726 100644 --- a/benchmark/path/parse.js +++ b/benchmark/path/parse-posix.js @@ -3,26 +3,32 @@ var path = require('path'); var v8 = require('v8'); var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e6], + path: [ + '', + '/', + '/foo', + '/foo/bar.baz', + 'foo/.bar.baz', + 'foo/bar', + '/foo/bar/baz/asdf/.quux' + ], + n: [1e6] }); function main(conf) { var n = +conf.n; - var p = path[conf.type]; - var test = conf.type === 'win32' - ? 'C:\\path\\dir\\index.html' - : '/home/user/dir/index.html'; + var p = path.posix; + var input = '' + conf.path; // Force optimization before starting the benchmark - p.parse(test); + p.parse(input); v8.setFlagsFromString('--allow_natives_syntax'); eval('%OptimizeFunctionOnNextCall(p.parse)'); - p.parse(test); + p.parse(input); bench.start(); for (var i = 0; i < n; i++) { - p.parse(test); + p.parse(input); } bench.end(n); } diff --git a/benchmark/path/parse-win32.js b/benchmark/path/parse-win32.js new file mode 100644 index 00000000000000..7746a10b797a36 --- /dev/null +++ b/benchmark/path/parse-win32.js @@ -0,0 +1,35 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + path: [ + '', + 'C:\\', + 'C:\\foo', + '\\foo', + 'E:\\foo\\bar.baz', + 'foo\\.bar.baz', + 'foo\\bar', + '\\foo\\bar\\baz\\asdf\\.quux' + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var input = '' + conf.path; + + // Force optimization before starting the benchmark + p.parse(input); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.parse)'); + p.parse(input); + + bench.start(); + for (var i = 0; i < n; i++) { + p.parse(input); + } + bench.end(n); +} diff --git a/benchmark/path/relative-posix.js b/benchmark/path/relative-posix.js new file mode 100644 index 00000000000000..59058babaf3e37 --- /dev/null +++ b/benchmark/path/relative-posix.js @@ -0,0 +1,40 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + paths: [ + ['/data/orandea/test/aaa', '/data/orandea/impl/bbb'].join('|'), + ['/', '/var'].join('|'), + ['/', '/'].join('|'), + ['/var', '/bin'].join('|'), + ['/foo/bar/baz/quux', '/'].join('|'), + ['/foo/bar/baz/quux', '/foo/bar/baz/quux'].join('|'), + ['/foo/bar/baz/quux', '/var/log'].join('|') + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.posix; + var from = '' + conf.paths; + var to = ''; + var delimIdx = from.indexOf('|'); + if (delimIdx > -1) { + to = from.slice(delimIdx + 1); + from = from.slice(0, delimIdx); + } + + // Force optimization before starting the benchmark + p.relative(from, to); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.relative)'); + p.relative(from, to); + + bench.start(); + for (var i = 0; i < n; i++) { + p.relative(from, to); + } + bench.end(n); +} diff --git a/benchmark/path/relative-win32.js b/benchmark/path/relative-win32.js new file mode 100644 index 00000000000000..f3eab74d268cb0 --- /dev/null +++ b/benchmark/path/relative-win32.js @@ -0,0 +1,38 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + paths: [ + ['C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb'].join('|'), + ['C:\\', 'D:\\'].join('|'), + ['C:\\foo\\bar\\baz', 'C:\\foo\\bar\\baz'].join('|'), + ['C:\\foo\\BAR\\BAZ', 'C:\\foo\\bar\\baz'].join('|'), + ['C:\\foo\\bar\\baz\\quux', 'C:\\'].join('|') + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var from = '' + conf.paths; + var to = ''; + var delimIdx = from.indexOf('|'); + if (delimIdx > -1) { + to = from.slice(delimIdx + 1); + from = from.slice(0, delimIdx); + } + + // Force optimization before starting the benchmark + p.relative(from, to); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.relative)'); + p.relative(from, to); + + bench.start(); + for (var i = 0; i < n; i++) { + p.relative(from, to); + } + bench.end(n); +} diff --git a/benchmark/path/relative.js b/benchmark/path/relative.js deleted file mode 100644 index d61c3961a62d8b..00000000000000 --- a/benchmark/path/relative.js +++ /dev/null @@ -1,33 +0,0 @@ -var common = require('../common.js'); -var path = require('path'); -var v8 = require('v8'); - -var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e5], -}); - -function main(conf) { - var n = +conf.n; - var runTest = conf.type === 'win32' ? runWin32Test : runPosixTest; - - // Force optimization before starting the benchmark - runTest(); - v8.setFlagsFromString('--allow_natives_syntax'); - eval('%OptimizeFunctionOnNextCall(path[conf.type].relative)'); - runTest(); - - bench.start(); - for (var i = 0; i < n; i++) { - runTest(); - } - bench.end(n); -} - -function runWin32Test() { - path.win32.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb'); -} - -function runPosixTest() { - path.posix.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'); -} diff --git a/benchmark/path/resolve.js b/benchmark/path/resolve-posix.js similarity index 56% rename from benchmark/path/resolve.js rename to benchmark/path/resolve-posix.js index 375e8b134ba0ea..0f0554d6fe25c5 100644 --- a/benchmark/path/resolve.js +++ b/benchmark/path/resolve-posix.js @@ -3,23 +3,29 @@ var path = require('path'); var v8 = require('v8'); var bench = common.createBenchmark(main, { - type: ['win32', 'posix'], - n: [1e6], + paths: [ + '', + ['', ''].join('|'), + ['foo/bar', '/tmp/file/', '..', 'a/../subfile'].join('|'), + ['a/b/c/', '../../..'].join('|') + ], + n: [1e6] }); function main(conf) { var n = +conf.n; - var p = path[conf.type]; + var p = path.posix; + var args = ('' + conf.paths).split('|'); // Force optimization before starting the benchmark - p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile'); + p.resolve.apply(null, args); v8.setFlagsFromString('--allow_natives_syntax'); eval('%OptimizeFunctionOnNextCall(p.resolve)'); - p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile'); + p.resolve.apply(null, args); bench.start(); for (var i = 0; i < n; i++) { - p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile'); + p.resolve.apply(null, args); } bench.end(n); } diff --git a/benchmark/path/resolve-win32.js b/benchmark/path/resolve-win32.js new file mode 100644 index 00000000000000..8a5502288f2996 --- /dev/null +++ b/benchmark/path/resolve-win32.js @@ -0,0 +1,31 @@ +var common = require('../common.js'); +var path = require('path'); +var v8 = require('v8'); + +var bench = common.createBenchmark(main, { + paths: [ + '', + ['', ''].join('|'), + ['c:/ignore', 'd:\\a/b\\c/d', '\\e.exe'].join('|'), + ['c:/blah\\blah', 'd:/games', 'c:../a'].join('|') + ], + n: [1e6] +}); + +function main(conf) { + var n = +conf.n; + var p = path.win32; + var args = ('' + conf.paths).split('|'); + + // Force optimization before starting the benchmark + p.resolve.apply(null, args); + v8.setFlagsFromString('--allow_natives_syntax'); + eval('%OptimizeFunctionOnNextCall(p.resolve)'); + p.resolve.apply(null, args); + + bench.start(); + for (var i = 0; i < n; i++) { + p.resolve.apply(null, args); + } + bench.end(n); +}