// Copyright (c) 2013, 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. // // Dart test program for testing typed data. // @dart = 2.9 // Library tag to be able to run in html test framework. library ByteDataTest; import "package:expect/expect.dart"; import 'dart:typed_data'; testGetters() { bool host_is_little_endian = (new Uint8List.view(new Uint16List.fromList([1]).buffer))[0] == 1; var list = new Uint8List(8); list[0] = 0xf1; list[1] = 0xf2; list[2] = 0xf3; list[3] = 0xf4; list[4] = 0xf5; list[5] = 0xf6; list[6] = 0xf7; list[7] = 0xf8; var ba = list.buffer; ByteData bd = new ByteData.view(ba); var value; int expected_value_be = -3598; int expected_value_le = -3343; value = bd.getInt16(0); // Default is big endian access. Expect.equals(expected_value_be, value); value = bd.getInt16(0, Endian.big); Expect.equals(expected_value_be, value); value = bd.getInt16(0, Endian.little); Expect.equals(expected_value_le, value); value = bd.getInt16(0, Endian.host); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); Expect.equals(expected_value_le, value); } else { Expect.isTrue(identical(Endian.host, Endian.big)); Expect.equals(expected_value_be, value); } value = bd.getUint16(0); // Default is big endian access. Expect.equals(0xf1f2, value); value = bd.getUint16(0, Endian.big); Expect.equals(0xf1f2, value); value = bd.getUint16(0, Endian.little); Expect.equals(0xf2f1, value); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); Expect.equals(0xf2f1, value); } else { Expect.isTrue(identical(Endian.host, Endian.big)); Expect.equals(0xf1f2, value); } expected_value_be = -235736076; expected_value_le = -185339151; value = bd.getInt32(0); // Default is big endian access. Expect.equals(expected_value_be, value); value = bd.getInt32(0, Endian.big); Expect.equals(expected_value_be, value); value = bd.getInt32(0, Endian.little); Expect.equals(expected_value_le, value); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); Expect.equals(expected_value_le, value); } else { Expect.isTrue(identical(Endian.host, Endian.big)); Expect.equals(expected_value_be, value); } value = bd.getUint32(0); // Default is big endian access. Expect.equals(0xf1f2f3f4, value); value = bd.getUint32(0, Endian.big); Expect.equals(0xf1f2f3f4, value); value = bd.getUint32(0, Endian.little); Expect.equals(0xf4f3f2f1, value); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); Expect.equals(0xf4f3f2f1, value); } else { Expect.isTrue(identical(Endian.host, Endian.big)); Expect.equals(0xf1f2f3f4, value); } expected_value_be = -1012478732780767240; expected_value_le = -506664896818842895; value = bd.getInt64(0); // Default is big endian access. Expect.equals(expected_value_be, value); value = bd.getInt64(0, Endian.big); Expect.equals(expected_value_be, value); value = bd.getInt64(0, Endian.little); Expect.equals(expected_value_le, value); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); Expect.equals(expected_value_le, value); } else { Expect.isTrue(identical(Endian.host, Endian.big)); Expect.equals(expected_value_be, value); } value = bd.getUint64(0); // Default is big endian access. Expect.equals(0xf1f2f3f4f5f6f7f8, value); value = bd.getUint64(0, Endian.big); Expect.equals(0xf1f2f3f4f5f6f7f8, value); value = bd.getUint64(0, Endian.little); Expect.equals(0xf8f7f6f5f4f3f2f1, value); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); Expect.equals(0xf8f7f6f5f4f3f2f1, value); } else { Expect.isTrue(identical(Endian.host, Endian.big)); Expect.equals(0xf1f2f3f4f5f6f7f8, value); } double expected_be_value = -2.4060893954673178e+30; double expected_le_value = -1.5462104171572421e+32; value = bd.getFloat32(0); // Default is big endian access. Expect.equals(expected_be_value, value); value = bd.getFloat32(0, Endian.big); Expect.equals(expected_be_value, value); value = bd.getFloat32(0, Endian.little); Expect.equals(expected_le_value, value); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); Expect.equals(expected_le_value, value); } else { Expect.isTrue(identical(Endian.host, Endian.big)); Expect.equals(expected_be_value, value); } expected_be_value = -7.898661740976602e+240; expected_le_value = -5.185705956736366e+274; value = bd.getFloat64(0); // Default is big endian access. Expect.equals(expected_be_value, value); value = bd.getFloat64(0, Endian.big); Expect.equals(expected_be_value, value); value = bd.getFloat64(0, Endian.little); Expect.equals(expected_le_value, value); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); Expect.equals(expected_le_value, value); } else { Expect.isTrue(identical(Endian.host, Endian.big)); Expect.equals(expected_be_value, value); } } validate16be(var list) { Expect.equals(0xf1, list[0]); Expect.equals(0xf2, list[1]); } validate16le(var list) { Expect.equals(0xf2, list[0]); Expect.equals(0xf1, list[1]); } validate32be(var list) { Expect.equals(0xf1, list[0]); Expect.equals(0xf2, list[1]); Expect.equals(0xf3, list[2]); Expect.equals(0xf4, list[3]); } validate32le(var list) { Expect.equals(0xf4, list[0]); Expect.equals(0xf3, list[1]); Expect.equals(0xf2, list[2]); Expect.equals(0xf1, list[3]); } validate64be(var list) { Expect.equals(0xf1, list[0]); Expect.equals(0xf2, list[1]); Expect.equals(0xf3, list[2]); Expect.equals(0xf4, list[3]); Expect.equals(0xf5, list[4]); Expect.equals(0xf6, list[5]); Expect.equals(0xf7, list[6]); Expect.equals(0xf8, list[7]); } validate64le(var list) { Expect.equals(0xf8, list[0]); Expect.equals(0xf7, list[1]); Expect.equals(0xf6, list[2]); Expect.equals(0xf5, list[3]); Expect.equals(0xf4, list[4]); Expect.equals(0xf3, list[5]); Expect.equals(0xf2, list[6]); Expect.equals(0xf1, list[7]); } testSetters() { bool host_is_little_endian = (new Uint8List.view(new Uint16List.fromList([1]).buffer))[0] == 1; var list = new Uint8List(8); for (int i = 0; i < list.length; i++) { list[i] = 0; } var ba = list.buffer; ByteData bd = new ByteData.view(ba); bd.setInt16(0, 0xf1f2); // Default is big endian access. validate16be(list); bd.setInt16(0, 0xf1f2, Endian.big); validate16be(list); bd.setInt16(0, 0xf1f2, Endian.little); validate16le(list); bd.setInt16(0, 0xf1f2, Endian.host); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); validate16le(list); } else { Expect.isTrue(identical(Endian.host, Endian.big)); validate16be(list); } bd.setUint16(0, 0xf1f2); // Default is big endian access. validate16be(list); bd.setUint16(0, 0xf1f2, Endian.big); validate16be(list); bd.setUint16(0, 0xf1f2, Endian.little); validate16le(list); bd.setUint16(0, 0xf1f2, Endian.host); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); validate16le(list); } else { Expect.isTrue(identical(Endian.host, Endian.big)); validate16be(list); } bd.setInt32(0, 0xf1f2f3f4); // Default is big endian access. validate32be(list); bd.setInt32(0, 0xf1f2f3f4, Endian.big); validate32be(list); bd.setInt32(0, 0xf1f2f3f4, Endian.little); validate32le(list); bd.setInt32(0, 0xf1f2f3f4, Endian.host); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); validate32le(list); } else { Expect.isTrue(identical(Endian.host, Endian.big)); validate32be(list); } bd.setUint32(0, 0xf1f2f3f4); // Default is big endian access. validate32be(list); bd.setUint32(0, 0xf1f2f3f4, Endian.big); validate32be(list); bd.setUint32(0, 0xf1f2f3f4, Endian.little); validate32le(list); bd.setUint32(0, 0xf1f2f3f4, Endian.host); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); validate32le(list); } else { Expect.isTrue(identical(Endian.host, Endian.big)); validate32be(list); } bd.setInt64(0, 0xf1f2f3f4f5f6f7f8); // Default is big endian access. validate64be(list); bd.setInt64(0, 0xf1f2f3f4f5f6f7f8, Endian.big); validate64be(list); bd.setInt64(0, 0xf1f2f3f4f5f6f7f8, Endian.little); validate64le(list); bd.setInt64(0, 0xf1f2f3f4f5f6f7f8, Endian.host); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); validate64le(list); } else { Expect.isTrue(identical(Endian.host, Endian.big)); validate64be(list); } bd.setUint64(0, 0xf1f2f3f4f5f6f7f8); // Default is big endian access. validate64be(list); bd.setUint64(0, 0xf1f2f3f4f5f6f7f8, Endian.big); validate64be(list); bd.setUint64(0, 0xf1f2f3f4f5f6f7f8, Endian.little); validate64le(list); bd.setUint64(0, 0xf1f2f3f4f5f6f7f8, Endian.host); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); validate64le(list); } else { Expect.isTrue(identical(Endian.host, Endian.big)); validate64be(list); } bd.setFloat32(0, -2.4060893954673178e+30); // Default is big endian access. validate32be(list); bd.setFloat32(0, -2.4060893954673178e+30, Endian.big); validate32be(list); bd.setFloat32(0, -2.4060893954673178e+30, Endian.little); validate32le(list); bd.setFloat32(0, -2.4060893954673178e+30, Endian.host); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); validate32le(list); } else { Expect.isTrue(identical(Endian.host, Endian.big)); validate32be(list); } bd.setFloat64(0, -7.898661740976602e+240); // Default is big endian access. validate64be(list); bd.setFloat64(0, -7.898661740976602e+240, Endian.big); validate64be(list); bd.setFloat64(0, -7.898661740976602e+240, Endian.little); validate64le(list); bd.setFloat64(0, -7.898661740976602e+240, Endian.host); if (host_is_little_endian) { Expect.isTrue(identical(Endian.host, Endian.little)); validate64le(list); } else { Expect.isTrue(identical(Endian.host, Endian.big)); validate64be(list); } } main() { testGetters(); testSetters(); }