@@ -345,6 +345,22 @@ class MessageUnpackerTest extends MessagePackSpec {
345345
346346 " be faster then msgpack-v6 skip" taggedAs (" cmp-skip" ) in {
347347
348+ trait Fixture {
349+ val unpacker : MessageUnpacker
350+ def run {
351+ var count = 0
352+ try {
353+ while (unpacker.hasNext) {
354+ unpacker.skipValue()
355+ count += 1
356+ }
357+ }
358+ finally {
359+ unpacker.close()
360+ }
361+ }
362+ }
363+
348364 val data = testData3(10000 )
349365 val N = 100
350366
@@ -367,21 +383,29 @@ class MessageUnpackerTest extends MessagePackSpec {
367383 unpacker.close()
368384 }
369385
370- block(" v7" ) {
371- val unpacker = Random .shuffle(unpackers(data)).head
372- var count = 0
373- try {
374- while (unpacker.hasNext) {
375- unpacker.skipValue()
376- count += 1
377- }
378- }
379- finally
380- unpacker.close()
386+ block(" v7-array" ) {
387+ new Fixture { override val unpacker = MessagePack .newDefaultUnpacker(data) }.run
388+ }
389+
390+ block(" v7-array-buffer" ) {
391+ new Fixture {
392+ val bb = ByteBuffer .allocate(data.length)
393+ bb.put(data).flip()
394+ override val unpacker = MessagePack .newDefaultUnpacker(bb)
395+ }.run
396+ }
397+ block(" v7-direct-buffer" ) {
398+ new Fixture {
399+ val db = ByteBuffer .allocateDirect(data.length)
400+ db.put(data).flip()
401+ override val unpacker = MessagePack .newDefaultUnpacker(db)
402+ }.run
381403 }
382404 }
383405
384- t(" v7" ).averageWithoutMinMax should be <= t(" v6" ).averageWithoutMinMax
406+ t(" v7-array" ).averageWithoutMinMax should be <= t(" v6" ).averageWithoutMinMax
407+ t(" v7-array-buffer" ).averageWithoutMinMax should be <= t(" v6" ).averageWithoutMinMax
408+ t(" v7-direct-buffer" ).averageWithoutMinMax should be <= t(" v6" ).averageWithoutMinMax
385409 }
386410
387411 import org .msgpack .`type` .{ValueType => ValueTypeV6 }
@@ -448,6 +472,20 @@ class MessageUnpackerTest extends MessagePackSpec {
448472 unpacker.skipValue()
449473 }
450474 }
475+ trait Fixture {
476+ val unpacker : MessageUnpacker
477+ def run {
478+ var count = 0
479+ try {
480+ while (unpacker.hasNext) {
481+ readValue(unpacker)
482+ count += 1
483+ }
484+ }
485+ finally
486+ unpacker.close()
487+ }
488+ }
451489
452490 val data = testData3(10000 )
453491 val N = 100
@@ -469,22 +507,29 @@ class MessageUnpackerTest extends MessagePackSpec {
469507 unpacker.close()
470508 }
471509
472- block(" v7" ) {
473- val unpacker = Random .shuffle(unpackers(data)).head
474- var count = 0
475- try {
476- while (unpacker.hasNext) {
477- readValue(unpacker)
478- count += 1
479- }
480- }
481- finally
482- unpacker.close()
510+ block(" v7-array" ) {
511+ new Fixture { override val unpacker = MessagePack .newDefaultUnpacker(data) }.run
483512 }
484- }
485513
486- t(" v7" ).averageWithoutMinMax should be <= t(" v6" ).averageWithoutMinMax
514+ block(" v7-array-buffer" ) {
515+ new Fixture {
516+ val bb = ByteBuffer .allocate(data.length)
517+ bb.put(data).flip()
518+ override val unpacker = MessagePack .newDefaultUnpacker(bb)
519+ }.run
520+ }
521+ block(" v7-direct-buffer" ) {
522+ new Fixture {
523+ val db = ByteBuffer .allocateDirect(data.length)
524+ db.put(data).flip()
525+ override val unpacker = MessagePack .newDefaultUnpacker(db)
526+ }.run
527+ }
528+ }
487529
530+ t(" v7-array" ).averageWithoutMinMax should be <= t(" v6" ).averageWithoutMinMax
531+ t(" v7-array-buffer" ).averageWithoutMinMax should be <= t(" v6" ).averageWithoutMinMax
532+ t(" v7-direct-buffer" ).averageWithoutMinMax should be <= t(" v6" ).averageWithoutMinMax
488533
489534 }
490535
@@ -500,6 +545,35 @@ class MessageUnpackerTest extends MessagePackSpec {
500545 }
501546 packer.close()
502547
548+ trait Fixture {
549+ val unpacker : MessageUnpacker
550+ val loop : Int
551+ def run {
552+ var i = 0
553+ try {
554+ while (i < loop) {
555+ val len = unpacker.unpackBinaryHeader()
556+ val out = new Array [Byte ](len)
557+ unpacker.readPayload(out, 0 , len)
558+ i += 1
559+ }
560+ }
561+ finally
562+ unpacker.close()
563+ }
564+ def runRef {
565+ var i = 0
566+ try {
567+ while (i < loop) {
568+ val len = unpacker.unpackBinaryHeader()
569+ val out = unpacker.readPayloadAsReference(len)
570+ i += 1
571+ }
572+ }
573+ finally
574+ unpacker.close()
575+ }
576+ }
503577 val b = bos.toByteArray
504578 time(" unpackBinary" , repeat = 100 ) {
505579 block(" v6" ) {
@@ -513,27 +587,54 @@ class MessageUnpackerTest extends MessagePackSpec {
513587 unpacker.close()
514588 }
515589
516- block(" v7" ) {
517- val unpacker = Random .shuffle(unpackers(b)).head
518- var i = 0
519- while (i < R ) {
520- val len = unpacker.unpackBinaryHeader()
521- val out = new Array [Byte ](len)
522- unpacker.readPayload(out, 0 , len)
523- i += 1
524- }
525- unpacker.close()
590+ block(" v7-array" ) {
591+ new Fixture {
592+ override val unpacker = MessagePack .newDefaultUnpacker(b)
593+ override val loop = R
594+ }.run
526595 }
527596
528- block(" v7-ref" ) {
529- val unpacker = Random .shuffle(unpackers(b)).head
530- var i = 0
531- while (i < R ) {
532- val len = unpacker.unpackBinaryHeader()
533- val out = unpacker.readPayloadAsReference(len)
534- i += 1
535- }
536- unpacker.close()
597+ block(" v7-array-buffer" ) {
598+ new Fixture {
599+ val bb = ByteBuffer .allocate(b.length)
600+ bb.put(b).flip()
601+ override val unpacker = MessagePack .newDefaultUnpacker(bb)
602+ override val loop = R
603+ }.run
604+ }
605+
606+ block(" v7-direct-buffer" ) {
607+ new Fixture {
608+ val db = ByteBuffer .allocateDirect(b.length)
609+ db.put(b).flip()
610+ override val unpacker = MessagePack .newDefaultUnpacker(db)
611+ override val loop = R
612+ }.run
613+ }
614+
615+ block(" v7-ref-array" ) {
616+ new Fixture {
617+ override val unpacker = MessagePack .newDefaultUnpacker(b)
618+ override val loop = R
619+ }.run
620+ }
621+
622+ block(" v7-ref-array-buffer" ) {
623+ new Fixture {
624+ val bb = ByteBuffer .allocate(b.length)
625+ bb.put(b).flip()
626+ override val unpacker = MessagePack .newDefaultUnpacker(bb)
627+ override val loop = R
628+ }.run
629+ }
630+
631+ block(" v7-ref-direct-buffer" ) {
632+ new Fixture {
633+ val db = ByteBuffer .allocateDirect(b.length)
634+ db.put(b).flip()
635+ override val unpacker = MessagePack .newDefaultUnpacker(db)
636+ override val loop = R
637+ }.run
537638 }
538639 }
539640 }
0 commit comments