// Copyright (C) 2016 the V8 project authors. All rights reserved.
// Copyright (C) 2017 Mozilla Corporation. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-%typedarray%.prototype.set-typedarray-offset
description: >
  Set converted values from different buffer of different types and different type instances
includes: [byteConversionValues.js, testTypedArray.js]
features: [SharedArrayBuffer]
---*/

testTypedArrayConversions(byteConversionValues, function(TA, value, expected, initial) {
  if (TA === Float64Array || TA === Float32Array || TA === Uint8ClampedArray) {
    return;
  }
  if (TA === Int32Array) {
    return;
  }

  var sab, src, target;

  sab = new SharedArrayBuffer(4);
  src = new Int32Array(sab);
  src[0] = value;
  target = new TA([initial]);

  target.set(src);

  assert.sameValue(target[0], expected, "src is SAB-backed");

  sab = new SharedArrayBuffer(4);
  src = new Int32Array([value]);
  target = new TA(sab);
  target[0] = initial;

  target.set(src);

  assert.sameValue(target[0], expected, "target is SAB-backed");

  var sab1 = new SharedArrayBuffer(4);
  var sab2 = new SharedArrayBuffer(4);
  src = new Int32Array(sab1);
  src[0] = value;
  target = new TA(sab2);
  target[0] = initial;

  target.set(src);

  assert.sameValue(target[0], expected, "src and target are SAB-backed");
});
