11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_cirequire('../common'); 41cb0ef41Sopenharmony_ciconst assert = require('assert'); 51cb0ef41Sopenharmony_ci 61cb0ef41Sopenharmony_ciconst a = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]); 71cb0ef41Sopenharmony_ciconst b = Buffer.from([5, 6, 7, 8, 9, 0, 1, 2, 3, 4]); 81cb0ef41Sopenharmony_ci 91cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b), -1); 101cb0ef41Sopenharmony_ci 111cb0ef41Sopenharmony_ci// Equivalent to a.compare(b). 121cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 0), -1); 131cb0ef41Sopenharmony_ciassert.throws(() => a.compare(b, '0'), { code: 'ERR_INVALID_ARG_TYPE' }); 141cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, undefined), -1); 151cb0ef41Sopenharmony_ci 161cb0ef41Sopenharmony_ci// Equivalent to a.compare(b). 171cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 0, undefined, 0), -1); 181cb0ef41Sopenharmony_ci 191cb0ef41Sopenharmony_ci// Zero-length target, return 1 201cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 0, 0, 0), 1); 211cb0ef41Sopenharmony_ciassert.throws( 221cb0ef41Sopenharmony_ci () => a.compare(b, 0, '0', '0'), 231cb0ef41Sopenharmony_ci { code: 'ERR_INVALID_ARG_TYPE' } 241cb0ef41Sopenharmony_ci); 251cb0ef41Sopenharmony_ci 261cb0ef41Sopenharmony_ci// Equivalent to Buffer.compare(a, b.slice(6, 10)) 271cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 6, 10), 1); 281cb0ef41Sopenharmony_ci 291cb0ef41Sopenharmony_ci// Zero-length source, return -1 301cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 6, 10, 0, 0), -1); 311cb0ef41Sopenharmony_ci 321cb0ef41Sopenharmony_ci// Zero-length source and target, return 0 331cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 0, 0, 0, 0), 0); 341cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 1, 1, 2, 2), 0); 351cb0ef41Sopenharmony_ci 361cb0ef41Sopenharmony_ci// Equivalent to Buffer.compare(a.slice(4), b.slice(0, 5)) 371cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 0, 5, 4), 1); 381cb0ef41Sopenharmony_ci 391cb0ef41Sopenharmony_ci// Equivalent to Buffer.compare(a.slice(1), b.slice(5)) 401cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 5, undefined, 1), 1); 411cb0ef41Sopenharmony_ci 421cb0ef41Sopenharmony_ci// Equivalent to Buffer.compare(a.slice(2), b.slice(2, 4)) 431cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 2, 4, 2), -1); 441cb0ef41Sopenharmony_ci 451cb0ef41Sopenharmony_ci// Equivalent to Buffer.compare(a.slice(4), b.slice(0, 7)) 461cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 0, 7, 4), -1); 471cb0ef41Sopenharmony_ci 481cb0ef41Sopenharmony_ci// Equivalent to Buffer.compare(a.slice(4, 6), b.slice(0, 7)); 491cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 0, 7, 4, 6), -1); 501cb0ef41Sopenharmony_ci 511cb0ef41Sopenharmony_ci// Null is ambiguous. 521cb0ef41Sopenharmony_ciassert.throws( 531cb0ef41Sopenharmony_ci () => a.compare(b, 0, null), 541cb0ef41Sopenharmony_ci { code: 'ERR_INVALID_ARG_TYPE' } 551cb0ef41Sopenharmony_ci); 561cb0ef41Sopenharmony_ci 571cb0ef41Sopenharmony_ci// Values do not get coerced. 581cb0ef41Sopenharmony_ciassert.throws( 591cb0ef41Sopenharmony_ci () => a.compare(b, 0, { valueOf: () => 5 }), 601cb0ef41Sopenharmony_ci { code: 'ERR_INVALID_ARG_TYPE' } 611cb0ef41Sopenharmony_ci); 621cb0ef41Sopenharmony_ci 631cb0ef41Sopenharmony_ci// Infinity should not be coerced. 641cb0ef41Sopenharmony_ciassert.throws( 651cb0ef41Sopenharmony_ci () => a.compare(b, Infinity, -Infinity), 661cb0ef41Sopenharmony_ci { code: 'ERR_OUT_OF_RANGE' } 671cb0ef41Sopenharmony_ci); 681cb0ef41Sopenharmony_ci 691cb0ef41Sopenharmony_ci// Zero length target because default for targetEnd <= targetSource 701cb0ef41Sopenharmony_ciassert.strictEqual(a.compare(b, 0xff), 1); 711cb0ef41Sopenharmony_ci 721cb0ef41Sopenharmony_ciassert.throws( 731cb0ef41Sopenharmony_ci () => a.compare(b, '0xff'), 741cb0ef41Sopenharmony_ci { code: 'ERR_INVALID_ARG_TYPE' } 751cb0ef41Sopenharmony_ci); 761cb0ef41Sopenharmony_ciassert.throws( 771cb0ef41Sopenharmony_ci () => a.compare(b, 0, '0xff'), 781cb0ef41Sopenharmony_ci { code: 'ERR_INVALID_ARG_TYPE' } 791cb0ef41Sopenharmony_ci); 801cb0ef41Sopenharmony_ci 811cb0ef41Sopenharmony_ciconst oor = { code: 'ERR_OUT_OF_RANGE' }; 821cb0ef41Sopenharmony_ci 831cb0ef41Sopenharmony_ciassert.throws(() => a.compare(b, 0, 100, 0), oor); 841cb0ef41Sopenharmony_ciassert.throws(() => a.compare(b, 0, 1, 0, 100), oor); 851cb0ef41Sopenharmony_ciassert.throws(() => a.compare(b, -1), oor); 861cb0ef41Sopenharmony_ciassert.throws(() => a.compare(b, 0, Infinity), oor); 871cb0ef41Sopenharmony_ciassert.throws(() => a.compare(b, 0, 1, -1), oor); 881cb0ef41Sopenharmony_ciassert.throws(() => a.compare(b, -Infinity, Infinity), oor); 891cb0ef41Sopenharmony_ciassert.throws(() => a.compare(), { 901cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE', 911cb0ef41Sopenharmony_ci name: 'TypeError', 921cb0ef41Sopenharmony_ci message: 'The "target" argument must be an instance of ' + 931cb0ef41Sopenharmony_ci 'Buffer or Uint8Array. Received undefined' 941cb0ef41Sopenharmony_ci}); 95