'use strict';

function isNothing(subject) {

return (typeof subject === 'undefined') || (subject === null);

}

function isObject(subject) {

return (typeof subject === 'object') && (subject !== null);

}

function toArray(sequence) {

if (Array.isArray(sequence)) return sequence;
else if (isNothing(sequence)) return [];

return [ sequence ];

}

function extend(target, source) {

var index, length, key, sourceKeys;

if (source) {
  sourceKeys = Object.keys(source);

  for (index = 0, length = sourceKeys.length; index < length; index += 1) {
    key = sourceKeys[index];
    target[key] = source[key];
  }
}

return target;

}

function repeat(string, count) {

var result = '', cycle;

for (cycle = 0; cycle < count; cycle += 1) {
  result += string;
}

return result;

}

function isNegativeZero(number) {

return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);

}

module.exports.isNothing = isNothing; module.exports.isObject = isObject; module.exports.toArray = toArray; module.exports.repeat = repeat; module.exports.isNegativeZero = isNegativeZero; module.exports.extend = extend;