|                                                                                                                                                                        |  | var tape             = require('tape')  , EE               = require('events').EventEmitter  , util             = require('util')
  , isStream         = require('./')  , isReadable       = require('./').isReadable  , isWritable       = require('./').isWritable  , isDuplex         = require('./').isDuplex
  , CoreStreams      = require('stream')  , ReadableStream10 = require('./readable-stream-1.0/')  , ReadableStream11 = require('./readable-stream-1.1/')
function test (pass, type, stream) {  tape('isStream('  + type + ')', function (t) {    t.plan(1)    t.ok(pass === isStream(stream), type)  })}
function testReadable (pass, type, stream) {  tape('isReadable('  + type + ')', function (t) {    t.plan(1)    t.ok(pass === isReadable(stream), type)  })}
function testWritable (pass, type, stream) {  tape('isWritable('  + type + ')', function (t) {    t.plan(1)    t.ok(pass === isWritable(stream), type)  })}
function testDuplex (pass, type, stream) {  tape('isDuplex('  + type + ')', function (t) {    t.plan(1)    t.ok(pass === isDuplex(stream), type)  })}
[ undefined, null, '', true, false, 0, 1, 1.0, 'string', {}, function foo () {} ].forEach(function (o) {  test(false, 'non-stream / primitive: ' + (JSON.stringify(o) || (o && o.toString()) || o), o)})
test(false, 'fake stream obj', { pipe: function () {} })
;(function () {
  // looks like a stream!
  function Stream () {    EE.call(this)  }  util.inherits(Stream, EE)  Stream.prototype.pipe = function () {}  Stream.Stream = Stream
  test(false, 'fake stream "new Stream()"', new Stream())
}())
test(true, 'CoreStreams.Stream', new (CoreStreams.Stream)())test(true, 'CoreStreams.Readable', new (CoreStreams.Readable)())test(true, 'CoreStreams.Writable', new (CoreStreams.Writable)())test(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)())test(true, 'CoreStreams.Transform', new (CoreStreams.Transform)())test(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
test(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)())test(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)())test(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)())test(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)())test(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
test(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)())test(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)())test(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)())test(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)())test(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
testReadable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)())testReadable(true, 'CoreStreams.Readable', new (CoreStreams.Readable)())testReadable(false, 'CoreStreams.Writable', new (CoreStreams.Writable)())testReadable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)())testReadable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)())testReadable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
testReadable(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)())testReadable(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)())testReadable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)())testReadable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)())testReadable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
testReadable(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)())testReadable(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)())testReadable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)())testReadable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)())testReadable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
testWritable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)())testWritable(false, 'CoreStreams.Readable', new (CoreStreams.Readable)())testWritable(true, 'CoreStreams.Writable', new (CoreStreams.Writable)())testWritable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)())testWritable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)())testWritable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
testWritable(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)())testWritable(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)())testWritable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)())testWritable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)())testWritable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
testWritable(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)())testWritable(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)())testWritable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)())testWritable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)())testWritable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
testDuplex(false, 'CoreStreams.Stream', new (CoreStreams.Stream)())testDuplex(false, 'CoreStreams.Readable', new (CoreStreams.Readable)())testDuplex(false, 'CoreStreams.Writable', new (CoreStreams.Writable)())testDuplex(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)())testDuplex(true, 'CoreStreams.Transform', new (CoreStreams.Transform)())testDuplex(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
testDuplex(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)())testDuplex(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)())testDuplex(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)())testDuplex(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)())testDuplex(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
testDuplex(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)())testDuplex(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)())testDuplex(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)())testDuplex(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)())testDuplex(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
;[ CoreStreams, ReadableStream10, ReadableStream11 ].forEach(function (p) {  [ 'Stream', 'Readable', 'Writable', 'Duplex', 'Transform', 'PassThrough' ].forEach(function (k) {    if (!p[k])      return
    function SubStream () {      p[k].call(this)    }    util.inherits(SubStream, p[k])
    test(true, 'Stream subclass: ' + p.name + '.' + k, new SubStream())
  })})
 |