testing-all-the-things (v2)

Revision 2 of this benchmark created by jes on


Description

coke!

Setup

var str = ":ricki!RickA@kim.dot.com PRIVMSG #expr :Hey expr, just wondering, how often is it that this code actually works?!";
    
    /*
      irc-message
      Copyright (c) 2013 Fionn Kelleher. All rights reserved.
      Licensed under the BSD 2-Clause License (FreeBSD) - see LICENSE.md.
    */
    
    var IRCMessage, Message, exports;
    
    IRCMessage = (function() {
    
      function IRCMessage(line) {
        var nextspace, pair, position, rawTags, tag, _i, _len;
        this.tags = {};
        this.prefix = "";
        this.command = "";
        this.params = [];
        position = 0;
        nextspace = 0;
        if (line.charAt(0) === "@") {
          nextspace = line.indexOf(" ");
          if (nextspace === -1) {
            return new Object;
          }
          rawTags = line.slice(1, nextspace).split(";");
          for (_i = 0, _len = rawTags.length; _i < _len; _i++) {
            tag = rawTags[_i];
            pair = tag.split("=");
            this.tags[pair[0]] = pair[1] || true;
          }
          position = nextspace + 1;
        }
        while (line.charAt(position) === " ") {
          position++;
        }
        if (line.charAt(position) === ":") {
          nextspace = line.indexOf(" ", position);
          if (nextspace === -1) {
            return new Object;
          }
          this.prefix = line.slice(position + 1, nextspace);
          position = nextspace + 1;
          while (line.charAt(position) === " ") {
            position++;
          }
        }
        nextspace = line.indexOf(" ", position);
        if (nextspace === -1) {
          if (line.length > position) {
            this.command = line.slice(position);
            return;
          } else {
            return;
          }
        }
        this.command = line.slice(position, nextspace);
        position = nextspace + 1;
        while (line.charAt(position) === " ") {
          position++;
        }
        while (position < line.length) {
          nextspace = line.indexOf(" ", position);
          if (line.charAt(position) === ":") {
            this.params.push(line.slice(position + 1));
            break;
          }
          if (nextspace !== -1) {
            this.params.push(line.slice(position, nextspace));
            position = nextspace + 1;
            while (line.charAt(position) === " ") {
              position++;
            }
            continue;
          }
          if (nextspace === -1) {
            this.params.push(line.slice(position));
            break;
          }
        }
        return;
      }
    
      IRCMessage.prototype.toString = function() {
        var param, string, tag, value, _i, _len, _ref, _ref1;
        string = "";
        if (Object.keys(this.tags).length !== 0) {
          string += "@";
          _ref = this.tags;
          for (tag in _ref) {
            value = _ref[tag];
            if (value !== true) {
              string += "" + tag + "=" + value + ";";
            } else {
              string += "" + tag + ";";
            }
          }
          string = string.slice(0, -1) + " ";
        }
        if (this.prefix.length !== 0) {
          string += ":" + this.prefix + " ";
        }
        if (this.command.length !== 0) {
          string += "" + this.command + " ";
        }
        if (this.params.length !== 0) {
          _ref1 = this.params;
          for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
            param = _ref1[_i];
            if (param.indexOf(" ") === -1) {
              string += "" + param + " ";
            } else {
              string += ":" + param + " ";
            }
          }
        }
        string = string.slice(0, -1);
        return string;
      };
    
      IRCMessage.prototype.prefixIsHostmask = function() {
        return this.prefix.indexOf("@") !== -1 && this.prefix.indexOf("!") !== -1;
      };
    
      IRCMessage.prototype.prefixIsServer = function() {
        return this.prefix.indexOf("@") === -1 && this.prefix.indexOf("!") === -1 && this.prefix.indexOf(".") !== -1;
      };
    
      IRCMessage.prototype.parseHostmaskFromPrefix = function() {
        var hostname, nickname, username, _ref;
        if (this.prefixIsHostmask()) {
          _ref = this.prefix.split(/[!@]/), nickname = _ref[0], username = _ref[1], hostname = _ref[2];
          return {
            nickname: nickname,
            username: username,
            hostname: hostname
          };
        } else {
          return null;
        }
      };
    
      return IRCMessage;
    
    })();
    
    Message = function(line) {
      var message;
      message = new IRCMessage(line);
      if (Object.getOwnPropertyNames(message).length === 0) {
        return null;
      } else {
        return message;
      }
    };
    
    var ircee = function protocol_parse(line) {
        var m = line.match(/^(:(\S+))?\s*([^:]\S+)\s+([^:]+)?(\s*:(.+))?/);
        var raw = m[0], source = m[2], cmd = m[3], 
        params = m[4], text = m[6];
        if (params) params = params.trim().split(' ');
        var target = params ? params[0] : null;
        var user = source ? source.match('(.+)!(.+)@(.+)') : null;
        return {
            raw: raw,
            source: source,
            cmd: cmd,
            user: user ? { 
                address: user[0], 
                nick: user[1], 
                user: user[2], 
                host: user[3] 
            } : null,
            params: params,
            target: target,
            text: text
        }
    }
    
    var construct = function protocol_construct(args) {
        args = [].slice.call(args);
        var last = args.length - 1;
        if (args[last] !== null)
            args[last] = ':' + args[last];
        else
            delete args[last];
        return args.join(' ') + '\n';
    }

Test runner

Ready to run.

Testing in
TestOps/sec
irc-message new
IRCMessage(str)
ready
ircee
ircee(str);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.