/* */ 
(function(Buffer, process) {
  var assert = require('assert');
  require('../test/common');
  var multipartParser = require('../lib/multipart_parser'),
      MultipartParser = multipartParser.MultipartParser,
      parser = new MultipartParser(),
      Buffer = require('buffer').Buffer,
      boundary = '-----------------------------168072824752491622650073',
      mb = 100,
      buffer = createMultipartBuffer(boundary, mb * 1024 * 1024),
      callbacks = {
        partBegin: -1,
        partEnd: -1,
        headerField: -1,
        headerValue: -1,
        partData: -1,
        end: -1
      };
  parser.initWithBoundary(boundary);
  parser.onHeaderField = function() {
    callbacks.headerField++;
  };
  parser.onHeaderValue = function() {
    callbacks.headerValue++;
  };
  parser.onPartBegin = function() {
    callbacks.partBegin++;
  };
  parser.onPartData = function() {
    callbacks.partData++;
  };
  parser.onPartEnd = function() {
    callbacks.partEnd++;
  };
  parser.onEnd = function() {
    callbacks.end++;
  };
  var start = +new Date(),
      nparsed = parser.write(buffer),
      duration = +new Date - start,
      mbPerSec = (mb / (duration / 1000)).toFixed(2);
  console.log(mbPerSec + ' mb/sec');
  assert.equal(nparsed, buffer.length);
  function createMultipartBuffer(boundary, size) {
    var head = '--' + boundary + '\r\n' + 'content-disposition: form-data; name="field1"\r\n' + '\r\n',
        tail = '\r\n--' + boundary + '--\r\n',
        buffer = new Buffer(size);
    buffer.write(head, 'ascii', 0);
    buffer.write(tail, 'ascii', buffer.length - tail.length);
    return buffer;
  }
  process.on('exit', function() {
    for (var k in callbacks) {
      assert.equal(0, callbacks[k], k + ' count off by ' + callbacks[k]);
    }
  });
})(require('buffer').Buffer, require('process'));
