// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// VMOptions=--optimization_counter_threshold=10 --no-background_compilation

// @dart = 2.9

import 'dart:typed_data';
import 'package:expect/expect.dart';

unalignedFloat32() {
  var bytes = new ByteData(64);
  bytes.setFloat32(0, 16.25, Endian.host);
  Expect.equals(16.25, bytes.getFloat32(0, Endian.host));
  bytes.setFloat32(1, 32.125, Endian.host);
  Expect.equals(32.125, bytes.getFloat32(1, Endian.host));
  bytes.setFloat32(2, 16.25, Endian.host);
  Expect.equals(16.25, bytes.getFloat32(2, Endian.host));
  bytes.setFloat32(3, 32.125, Endian.host);
  Expect.equals(32.125, bytes.getFloat32(3, Endian.host));
}

unalignedFloat64() {
  var bytes = new ByteData(64);
  bytes.setFloat64(0, 16.25, Endian.host);
  Expect.equals(16.25, bytes.getFloat64(0, Endian.host));
  bytes.setFloat64(1, 32.125, Endian.host);
  Expect.equals(32.125, bytes.getFloat64(1, Endian.host));
  bytes.setFloat64(2, 16.25, Endian.host);
  Expect.equals(16.25, bytes.getFloat64(2, Endian.host));
  bytes.setFloat64(3, 32.125, Endian.host);
  Expect.equals(32.125, bytes.getFloat64(3, Endian.host));
  bytes.setFloat64(4, 16.25, Endian.host);
  Expect.equals(16.25, bytes.getFloat64(4, Endian.host));
  bytes.setFloat64(5, 32.125, Endian.host);
  Expect.equals(32.125, bytes.getFloat64(5, Endian.host));
  bytes.setFloat64(6, 16.25, Endian.host);
  Expect.equals(16.25, bytes.getFloat64(6, Endian.host));
  bytes.setFloat64(7, 32.125, Endian.host);
  Expect.equals(32.125, bytes.getFloat64(7, Endian.host));
}

main() {
  for (var i = 0; i < 20; i++) {
    unalignedFloat32();
    unalignedFloat64();
  }
}
