--- /dev/null
+// test the througput of the fs.WriteStream class.
+
+var path = require('path');
+var common = require('../common.js');
+var filename = path.resolve(__dirname, '.removeme-benchmark-garbage');
+var fs = require('fs');
+var filesize = 1000 * 1024 * 1024;
+var assert = require('assert');
+
+var type, encoding, size;
+
+var bench = common.createBenchmark(main, {
+ type: ['buf', 'asc', 'utf'],
+ size: [1024, 4096, 65535, 1024*1024]
+});
+
+function main(conf) {
+ type = conf.type;
+ size = +conf.size;
+
+ switch (type) {
+ case 'buf':
+ encoding = null;
+ break;
+ case 'asc':
+ encoding = 'ascii';
+ break;
+ case 'utf':
+ encoding = 'utf8';
+ break;
+ default:
+ throw new Error('invalid type');
+ }
+
+ makeFile(runTest);
+}
+
+function runTest() {
+ assert(fs.statSync(filename).size === filesize);
+ var rs = fs.createReadStream(filename, {
+ bufferSize: size,
+ encoding: encoding
+ });
+
+ rs.on('open', function() {
+ bench.start();
+ });
+
+ var bytes = 0;
+ rs.on('data', function(chunk) {
+ bytes += chunk.length;
+ });
+
+ rs.on('end', function() {
+ try { fs.unlinkSync(filename); } catch (e) {}
+ // MB/sec
+ bench.end(bytes / (1024 * 1024));
+ });
+}
+
+function makeFile() {
+ var buf = new Buffer(filesize / 1024);
+ if (encoding === 'utf8') {
+ // ΓΌ
+ for (var i = 0; i < buf.length; i++) {
+ buf[i] = i % 2 === 0 ? 0xC3 : 0xBC;
+ }
+ } else if (encoding === 'ascii') {
+ buf.fill('a');
+ } else {
+ buf.fill('x');
+ }
+
+ try { fs.unlinkSync(filename); } catch (e) {}
+ var w = 1024;
+ var ws = fs.createWriteStream(filename);
+ ws.on('close', runTest);
+ ws.on('drain', write);
+ write();
+ function write() {
+ do {
+ w--;
+ } while (false !== ws.write(buf) && w > 0);
+ if (w === 0)
+ ws.end();
+ }
+}