diff --git a/LibTest/typed_data/Int16List/Int16List.fromList_A02_t01.dart b/LibTest/typed_data/Int16List/Int16List.fromList_A02_t01.dart
index 3161dfd..a9b0c29 100644
--- a/LibTest/typed_data/Int16List/Int16List.fromList_A02_t01.dart
+++ b/LibTest/typed_data/Int16List/Int16List.fromList_A02_t01.dart
@@ -12,15 +12,14 @@
 /// are copied.
 /// @author ngl@unipro.ru
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt16.lib.dart";
 
 void check(List<int> list) {
   Int16List l = new Int16List.fromList(list);
   Expect.equals(l.length, list.length);
-  Expect.listEquals(list.map(toInt16).toList(), l);
+  Expect.listEquals(list.map((x) => x.toUnsigned(16)).toList(),
+      l.map((x) => x.toUnsigned(16)).toList());
 }
 
 main() {
diff --git a/LibTest/typed_data/Int32List/Int32List.fromList_A01_t02.dart b/LibTest/typed_data/Int32List/Int32List.fromList_A01_t02.dart
index cc4a670..9abe50e 100644
--- a/LibTest/typed_data/Int32List/Int32List.fromList_A01_t02.dart
+++ b/LibTest/typed_data/Int32List/Int32List.fromList_A01_t02.dart
@@ -11,15 +11,14 @@
 /// the [elements].
 /// @author msyabro
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 void check(List<int> array) {
   Int32List l = new Int32List.fromList(array);
   Expect.equals(l.length, array.length);
-  Expect.listEquals(array.map(toInt32).toList(), l);
+  Expect.listEquals(array.map( (x) => x.toUnsigned(32)).toList(),
+      l.map((x) => x.toUnsigned(32)).toList());
 }
 
 main() {
diff --git a/LibTest/typed_data/Int32List/Int32List.fromList_A02_t01.dart b/LibTest/typed_data/Int32List/Int32List.fromList_A02_t01.dart
index 6e52b32..6345b15 100644
--- a/LibTest/typed_data/Int32List/Int32List.fromList_A02_t01.dart
+++ b/LibTest/typed_data/Int32List/Int32List.fromList_A02_t01.dart
@@ -12,15 +12,13 @@
 /// are copied.
 /// @author ngl@unipro.ru
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 void check(List<int> array) {
   Int32List l = new Int32List.fromList(array);
   Expect.equals(l.length, array.length);
-  Expect.listEquals(array.map(toInt32).toList(), l);
+  Expect.listEquals(array.map((x) => x.toUnsigned(32)).toList(), l.map((x) => x.toUnsigned(32)).toList());
   for (int i = 0; i < l.length; ++i) {
     Expect.notEquals(array[i], l[i]);
   }
diff --git a/LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t01.dart b/LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t01.dart
index 3d65fb0..bddc009 100644
--- a/LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t01.dart
+++ b/LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t01.dart
@@ -9,19 +9,17 @@
 /// @description Checks that lanes are converted correctly.
 /// @author msyabro
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 check(x, y, z, w, floatX, floatY, floatZ, floatW) {
   var floatObj = new Float32x4(floatX, floatY, floatZ, floatW);
   var res = new Int32x4.fromFloat32x4Bits(floatObj);
 
-  Expect.equals(toInt32(x), res.x);
-  Expect.equals(toInt32(y), res.y);
-  Expect.equals(toInt32(z), res.z);
-  Expect.equals(toInt32(w), res.w);
+  Expect.equals(x.toUnsigned(32), res.x.toUnsigned(32));
+  Expect.equals(y.toUnsigned(32), res.y.toUnsigned(32));
+  Expect.equals(z.toUnsigned(32), res.z.toUnsigned(32));
+  Expect.equals(w.toUnsigned(32), res.w.toUnsigned(32));
 }
 
 main() {
diff --git a/LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t02.dart b/LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t02.dart
index f20e3fb..b677e68 100644
--- a/LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t02.dart
+++ b/LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t02.dart
@@ -9,10 +9,8 @@
 /// @description Checks special cases.
 /// @author msyabro
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 main() {
   var obj = new Float32x4(double.infinity, double.negativeInfinity,
@@ -20,7 +18,7 @@
   var res = new Int32x4.fromFloat32x4Bits(obj);
 
   Expect.equals(0x7f800000, res.x);
-  Expect.equals(toInt32(0xff800000), res.y);
+  Expect.equals(0xff800000.toUnsigned(32), res.y.toUnsigned(32));
 
   var nanMask = 0x7f800000;
   var fraction = 0x7fffff;
diff --git a/LibTest/typed_data/Int32x4/Int32x4_A01_t01.dart b/LibTest/typed_data/Int32x4/Int32x4_A01_t01.dart
index 46f58e9..49ac1fc 100644
--- a/LibTest/typed_data/Int32x4/Int32x4_A01_t01.dart
+++ b/LibTest/typed_data/Int32x4/Int32x4_A01_t01.dart
@@ -10,18 +10,16 @@
 /// are set correctly.
 /// @author msyabro
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 check(x, y, z, w) {
   var obj = new Int32x4(x, y, z, w);
   Expect.isTrue(obj is Int32x4);
-  Expect.equals(toInt32(x), obj.x);
-  Expect.equals(toInt32(y), obj.y);
-  Expect.equals(toInt32(z), obj.z);
-  Expect.equals(toInt32(w), obj.w);
+  Expect.equals(x.toUnsigned(32), obj.x.toUnsigned(32));
+  Expect.equals(y.toUnsigned(32), obj.y.toUnsigned(32));
+  Expect.equals(z.toUnsigned(32), obj.z.toUnsigned(32));
+  Expect.equals(w.toUnsigned(32), obj.w.toUnsigned(32));
 }
 
 main() {
diff --git a/LibTest/typed_data/Int32x4/operator_AND_A01_t01.dart b/LibTest/typed_data/Int32x4/operator_AND_A01_t01.dart
index 470e48a..8512f1a 100644
--- a/LibTest/typed_data/Int32x4/operator_AND_A01_t01.dart
+++ b/LibTest/typed_data/Int32x4/operator_AND_A01_t01.dart
@@ -11,20 +11,18 @@
 /// @note undocumented
 /// @author msyabro
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 check(x1, y1, z1, w1, x2, y2, z2, w2) {
   var obj1 = new Int32x4(x1, y1, z1, w1);
   var obj2 = new Int32x4(x2, y2, z2, w2);
   var res = obj1 & obj2;
 
-  Expect.equals(toInt32(x1 & x2), res.x);
-  Expect.equals(toInt32(y1 & y2), res.y);
-  Expect.equals(toInt32(z1 & z2), res.z);
-  Expect.equals(toInt32(w1 & w2), res.w);
+  Expect.equals((x1 & x2).toUnsigned(32), res.x.toUnsigned(32));
+  Expect.equals((y1 & y2).toUnsigned(32), res.y.toUnsigned(32));
+  Expect.equals((z1 & z2).toUnsigned(32), res.z.toUnsigned(32));
+  Expect.equals((w1 & w2).toUnsigned(32), res.w.toUnsigned(32));
 }
 
 main() {
diff --git a/LibTest/typed_data/Int32x4/operator_OR_A01_t01.dart b/LibTest/typed_data/Int32x4/operator_OR_A01_t01.dart
index aa0648c..27441f6 100644
--- a/LibTest/typed_data/Int32x4/operator_OR_A01_t01.dart
+++ b/LibTest/typed_data/Int32x4/operator_OR_A01_t01.dart
@@ -11,10 +11,8 @@
 /// @note undocumented
 /// @author msyabro
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 check(x1, y1, z1, w1, x2, y2, z2, w2) {
   var obj1 = new Int32x4(x1, y1, z1, w1);
@@ -22,10 +20,10 @@
   var res = obj1 | obj2;
 
 //  Expect.equals(x1|x2, res.x);
-  Expect.equals(toInt32(x1) | toInt32(x2), res.x);
-  Expect.equals(toInt32(y1) | toInt32(y2), res.y);
-  Expect.equals(toInt32(z1) | toInt32(z2), res.z);
-  Expect.equals(toInt32(w1) | toInt32(w2), res.w);
+  Expect.equals(x1.toUnsigned(32) | x2.toUnsigned(32), res.x.toUnsigned(32));
+  Expect.equals(y1.toUnsigned(32) | y2.toUnsigned(32), res.y.toUnsigned(32));
+  Expect.equals(z1.toUnsigned(32) | z2.toUnsigned(32), res.z.toUnsigned(32));
+  Expect.equals(w1.toUnsigned(32) | w2.toUnsigned(32), res.w.toUnsigned(32));
 }
 
 main() {
diff --git a/LibTest/typed_data/Int32x4/operator_XOR_A01_t01.dart b/LibTest/typed_data/Int32x4/operator_XOR_A01_t01.dart
index ec17f86..8ded262 100644
--- a/LibTest/typed_data/Int32x4/operator_XOR_A01_t01.dart
+++ b/LibTest/typed_data/Int32x4/operator_XOR_A01_t01.dart
@@ -11,20 +11,18 @@
 /// @note undocumented
 /// @author msyabro
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 check(x1, y1, z1, w1, x2, y2, z2, w2) {
   var obj1 = new Int32x4(x1, y1, z1, w1);
   var obj2 = new Int32x4(x2, y2, z2, w2);
   var res = obj1 ^ obj2;
 
-  Expect.equals(toInt32(x1 ^ x2), res.x);
-  Expect.equals(toInt32(y1 ^ y2), res.y);
-  Expect.equals(toInt32(z1 ^ z2), res.z);
-  Expect.equals(toInt32(w1 ^ w2), res.w);
+  Expect.equals((x1 ^ x2).toUnsigned(32), res.x.toUnsigned(32));
+  Expect.equals((y1 ^ y2).toUnsigned(32), res.y.toUnsigned(32));
+  Expect.equals((z1 ^ z2).toUnsigned(32), res.z.toUnsigned(32));
+  Expect.equals((w1 ^ w2).toUnsigned(32), res.w.toUnsigned(32));
 }
 
 main() {
diff --git a/LibTest/typed_data/Int32x4/operator_addition_A01_t01.dart b/LibTest/typed_data/Int32x4/operator_addition_A01_t01.dart
index de992b4..c415c67 100644
--- a/LibTest/typed_data/Int32x4/operator_addition_A01_t01.dart
+++ b/LibTest/typed_data/Int32x4/operator_addition_A01_t01.dart
@@ -11,20 +11,18 @@
 /// @note undocumented
 /// @author ngl@unipro.ru
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 check(x1, y1, z1, w1, x2, y2, z2, w2) {
   var obj1 = new Int32x4(x1, y1, z1, w1);
   var obj2 = new Int32x4(x2, y2, z2, w2);
   var res = obj1 + obj2;
 
-  Expect.equals(toInt32(x1 + x2), res.x);
-  Expect.equals(toInt32(y1 + y2), res.y);
-  Expect.equals(toInt32(z1 + z2), res.z);
-  Expect.equals(toInt32(w1 + w2), res.w);
+  Expect.equals((x1 + x2).toUnsigned(32), res.x.toUnsigned(32));
+  Expect.equals((y1 + y2).toUnsigned(32), res.y.toUnsigned(32));
+  Expect.equals((z1 + z2).toUnsigned(32), res.z.toUnsigned(32));
+  Expect.equals((w1 + w2).toUnsigned(32), res.w.toUnsigned(32));
 }
 
 main() {
diff --git a/LibTest/typed_data/Int32x4/operator_subtraction_A01_t01.dart b/LibTest/typed_data/Int32x4/operator_subtraction_A01_t01.dart
index ae8b68c..2a086a0 100644
--- a/LibTest/typed_data/Int32x4/operator_subtraction_A01_t01.dart
+++ b/LibTest/typed_data/Int32x4/operator_subtraction_A01_t01.dart
@@ -11,20 +11,18 @@
 /// @note undocumented
 /// @author ngl@unipro.ru
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt32.lib.dart";
 
 check(x1, y1, z1, w1, x2, y2, z2, w2) {
   var obj1 = new Int32x4(x1, y1, z1, w1);
   var obj2 = new Int32x4(x2, y2, z2, w2);
   var res = obj1 - obj2;
 
-  Expect.equals(toInt32(x1 - x2), res.x);
-  Expect.equals(toInt32(y1 - y2), res.y);
-  Expect.equals(toInt32(z1 - z2), res.z);
-  Expect.equals(toInt32(w1 - w2), res.w);
+  Expect.equals((x1 - x2).toUnsigned(32), res.x.toUnsigned(32));
+  Expect.equals((y1 - y2).toUnsigned(32), res.y.toUnsigned(32));
+  Expect.equals((z1 - z2).toUnsigned(32), res.z.toUnsigned(32));
+  Expect.equals((w1 - w2).toUnsigned(32), res.w.toUnsigned(32));
 }
 
 main() {
diff --git a/LibTest/typed_data/Int8List/Int8List.fromList_A01_t02.dart b/LibTest/typed_data/Int8List/Int8List.fromList_A01_t02.dart
index 0e0bc8d..aedf1dd 100644
--- a/LibTest/typed_data/Int8List/Int8List.fromList_A01_t02.dart
+++ b/LibTest/typed_data/Int8List/Int8List.fromList_A01_t02.dart
@@ -11,15 +11,14 @@
 /// the [elements].
 /// @author msyabro
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt8.lib.dart";
 
 void check(List<int> array) {
   Int8List l = new Int8List.fromList(array);
   Expect.equals(l.length, array.length);
-  Expect.listEquals(array.map(toInt8).toList(), l);
+  Expect.listEquals(array.map((x) => x.toUnsigned(8)).toList(),
+      l.map((x) => x.toUnsigned(8)).toList());
 }
 
 main() {
diff --git a/LibTest/typed_data/Int8List/Int8List.fromList_A02_t01.dart b/LibTest/typed_data/Int8List/Int8List.fromList_A02_t01.dart
index 1fade9c..ab2d3c6 100644
--- a/LibTest/typed_data/Int8List/Int8List.fromList_A02_t01.dart
+++ b/LibTest/typed_data/Int8List/Int8List.fromList_A02_t01.dart
@@ -12,15 +12,14 @@
 /// are copied.
 /// @author ngl@unipro.ru
 
-
 import "dart:typed_data";
 import "../../../Utils/expect.dart";
-import "../toInt8.lib.dart";
 
 void check(List<int> list) {
   Int8List l = new Int8List.fromList(list);
   Expect.equals(l.length, list.length);
-  Expect.listEquals(list.map(toInt8).toList(), l);
+  Expect.listEquals(list.map((x) => x.toUnsigned(8)).toList(),
+      l.map((x) => x.toUnsigned(8)).toList());
 }
 
 main() {
diff --git a/LibTest/typed_data/toInt16.lib.dart b/LibTest/typed_data/toInt16.lib.dart
deleted file mode 100644
index 9140e11..0000000
--- a/LibTest/typed_data/toInt16.lib.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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 = 2.9
- 
-library toInt8;
-//import "../../../Utils/expect.dart";
-
-int toInt16(x) {
-  x =x & 0xFFFF;
-  if (x & 0x8000 == 0) {
-    return x;
-  } else {
-    return -((~(x & 0x7FFF) & 0x7FFF) + 1);
-    /*
-    var m=x & 0x7FFF;
-    print ("m=$m");
-    m=~m;
-    print ("~m=$m");
-    m=m & 0x7FFF;
-    print ("m31=$m");
-    m=m+1;
-    print ("m+1=$m");
-    m=-m;
-    print ("m=$m");
-    return m;
-    */
-  }
-}
-/*
-check(x, y) {
-  Expect.equals(x, toInt32(y));
-}
-
-main() {
-  check(0,0);
-  check(0, 0x800);
-  check(-1, 0xffffffff);
-}
-*/
diff --git a/LibTest/typed_data/toInt32.lib.dart b/LibTest/typed_data/toInt32.lib.dart
deleted file mode 100644
index e89269d..0000000
--- a/LibTest/typed_data/toInt32.lib.dart
+++ /dev/null
@@ -1,44 +0,0 @@
-// 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 = 2.9
- 
-library toInt32;
-//import "../../../Utils/expect.dart";
-
-int toInt32(x) {
-  x =x & 0xFFFFFFFF;
-  if (x & 0x80000000 == 0) {
-    return x;
-  } else {
-    return -((~(x & 0x7FFFFFFF) & 0x7FFFFFFF)+1);
-    /*
-    var m=x & 0x7FFFFFFF;
-    print ("m=$m");
-    m=~m;
-    print ("~m=$m");
-    m=m & 0x7FFFFFFF;
-    print ("m31=$m");
-    m=m+1;
-    print ("m+1=$m");
-    m=-m;
-    print ("m=$m");
-    return m;
-    */
-  }
-}
-/*
-check(x, y) {
-  Expect.equals(x, toInt32(y));
-}
-
-main() {
-  check(0,0);
-  check(0, 0x800000000);
-  check( 0x00ffffff, 0x00ffffff);
-  check( 0x7fffffff, 0x7fffffff);
-  check(-1, 0xffffffff);
-  check(-2147483648, 0x80000000);
-}
-*/
diff --git a/LibTest/typed_data/toInt8.lib.dart b/LibTest/typed_data/toInt8.lib.dart
deleted file mode 100644
index 0f95ebe..0000000
--- a/LibTest/typed_data/toInt8.lib.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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 = 2.9
- 
-library toInt8;
-//import "../../../Utils/expect.dart";
-
-int toInt8(x) {
-  x =x & 0xFF;
-  if (x & 0x80 == 0) {
-    return x;
-  } else {
-    return -((~(x & 0x7F) & 0x7F)+1);
-    /*
-    var m=x & 0x7F;
-    print ("m=$m");
-    m=~m;
-    print ("~m=$m");
-    m=m & 0x7F;
-    print ("m31=$m");
-    m=m+1;
-    print ("m+1=$m");
-    m=-m;
-    print ("m=$m");
-    return m;
-    */
-  }
-}
-/*
-check(x, y) {
-  Expect.equals(x, toInt32(y));
-}
-
-main() {
-  check(0,0);
-  check(0, 0x800);
-  check(-1, 0xffffffff);
-}
-*/
