text: load("fcfbc86708bc3a4062c2091a062e13b6.js");
  load("f84fa150dbe5b1b3e196e3bdf2e8ab6e.js");
  load("1b3dbc1cddb6b5cc8ace501cab6be659.js");
  // |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer()
  /*
   * Any copyright is dedicated to the Public Domain.
   * http://creativecommons.org/licenses/publicdomain/
   */
  
  var gTestfile = "typedarray-copyWithin-arguments-detaching.js";
  //-----------------------------------------------------------------------------
  var BUGNUMBER = 991981;
  var summary =
    "%TypedArray.prototype.copyWithin shouldn't misbehave horribly if " +
    "index-argument conversion detaches the underlying ArrayBuffer";
  
  print(BUGNUMBER + ": " + summary);
  
  /**************
   * BEGIN TEST *
   **************/
  
  function testBegin()
  {
    var ab = new ArrayBuffer(0x1000);
  
    var begin =
      {
        valueOf: function()
        {
          detachArrayBuffer(ab);
          return 0x800;
        }
      };
  
    var ta = new Uint8Array(ab);
  
    var ok = false;
    try
    {
      ta.copyWithin(0, begin, 0x1000);
    }
    catch (e)
    {
      ok = true;
    }
    assertEq(ok, true, "start weirdness should have thrown");
    assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
  }
  testBegin();
  
  function testEnd()
  {
    var ab = new ArrayBuffer(0x1000);
  
    var end =
      {
        valueOf: function()
        {
          detachArrayBuffer(ab);
          return 0x1000;
        }
      };
  
    var ta = new Uint8Array(ab);
  
    var ok = false;
    try
    {
      ta.copyWithin(0, 0x800, end);
    }
    catch (e)
    {
      ok = true;
    }
    assertEq(ok, true, "start weirdness should have thrown");
    assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
  }
  testEnd();
  
  function testDest()
  {
    var ab = new ArrayBuffer(0x1000);
  
    var dest =
      {
        valueOf: function()
        {
          detachArrayBuffer(ab);
          return 0;
        }
      };
  
    var ta = new Uint8Array(ab);
  
    var ok = false;
    try
    {
      ta.copyWithin(dest, 0x800, 0x1000);
    }
    catch (e)
    {
      ok = true;
    }
    assertEq(ok, true, "start weirdness should have thrown");
    assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
  }
  testDest();
  
  /******************************************************************************/
  
  if (typeof reportCompare === "function")
    reportCompare(true, true);
  
  print("Tests complete");
  