blob: d61938df6a52d2a2a73534394533c44e9a929773 [file] [log] [blame]
// Copyright (c) 2023, 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.
import 'dart:io';
import 'package:jni/jni.dart';
import 'package:test/test.dart';
import 'test_util/test_util.dart';
void main() {
// Don't forget to initialize JNI.
if (!Platform.isAndroid) {
checkDylibIsUpToDate();
spawnJvm();
}
run(testRunner: test);
}
void run({required TestRunnerCallback testRunner}) {
testRunner('JByte', () {
const val = 1 << 5;
using((arena) {
expect(JByte(val).byteValue(releaseOriginal: true), val);
expect((-val).toJByte().byteValue(releaseOriginal: true), -val);
});
});
testRunner('JCharacter', () {
const val = 1 << 5;
using((arena) {
expect(JCharacter(val).charValue(releaseOriginal: true), val);
expect(JCharacter(0).charValue(releaseOriginal: true), 0);
});
});
testRunner('JShort', () {
const val = 1 << 10;
using((arena) {
expect(JShort(val).shortValue(releaseOriginal: true), val);
expect((-val).toJShort().shortValue(releaseOriginal: true), -val);
});
});
testRunner('JInteger', () {
const val = 1 << 20;
using((arena) {
expect(JInteger(val).intValue(releaseOriginal: true), val);
expect((-val).toJInteger().intValue(releaseOriginal: true), -val);
});
});
testRunner('JLong', () {
const val = 1 << 40;
using((arena) {
expect(JLong(val).longValue(releaseOriginal: true), val);
expect((-val).toJLong().longValue(releaseOriginal: true), -val);
});
});
testRunner('JFloat', () {
const val = 3.14;
const eps = 1e-6;
using((arena) {
expect(JFloat(val).floatValue(releaseOriginal: true), closeTo(val, eps));
expect((-val).toJFloat().floatValue(releaseOriginal: true),
closeTo(-val, eps));
});
});
testRunner('JDouble', () {
const val = 3.14;
const eps = 1e-9;
using((arena) {
expect(
JDouble(val).doubleValue(releaseOriginal: true), closeTo(val, eps));
expect((-val).toJDouble().doubleValue(releaseOriginal: true),
closeTo(-val, eps));
});
});
testRunner('JBoolean', () {
using((arena) {
expect(JBoolean(false).booleanValue(releaseOriginal: true), false);
expect(JBoolean(true).booleanValue(releaseOriginal: true), true);
});
});
testRunner('JByte.\$type hashCode and ==', () {
using((arena) {
final a = JByte(1)..releasedBy(arena);
final b = JByte(2)..releasedBy(arena);
expect(a.$type, b.$type);
expect(a.$type.hashCode, b.$type.hashCode);
});
});
testRunner('JCharacter.\$type hashCode and ==', () {
using((arena) {
final a = JCharacter(1)..releasedBy(arena);
final b = JCharacter(2)..releasedBy(arena);
expect(a.$type, b.$type);
expect(a.$type.hashCode, b.$type.hashCode);
});
});
testRunner('JShort.\$type hashCode and ==', () {
using((arena) {
final a = JShort(1)..releasedBy(arena);
final b = JShort(2)..releasedBy(arena);
expect(a.$type, b.$type);
expect(a.$type.hashCode, b.$type.hashCode);
});
});
testRunner('JInteger.\$type hashCode and ==', () {
using((arena) {
final a = JInteger(1)..releasedBy(arena);
final b = JInteger(2)..releasedBy(arena);
expect(a.$type, b.$type);
expect(a.$type.hashCode, b.$type.hashCode);
});
});
testRunner('JLong.\$type hashCode and ==', () {
using((arena) {
final a = JLong(1)..releasedBy(arena);
final b = JLong(2)..releasedBy(arena);
expect(a.$type, b.$type);
expect(a.$type.hashCode, b.$type.hashCode);
});
});
testRunner('JFloat.\$type hashCode and ==', () {
using((arena) {
final a = JFloat(1.0)..releasedBy(arena);
final b = JFloat(2.0)..releasedBy(arena);
expect(a.$type, b.$type);
expect(a.$type.hashCode, b.$type.hashCode);
});
});
testRunner('JDouble.\$type hashCode and ==', () {
using((arena) {
final a = JDouble(1.0)..releasedBy(arena);
final b = JDouble(2.0)..releasedBy(arena);
expect(a.$type, b.$type);
expect(a.$type.hashCode, b.$type.hashCode);
});
});
testRunner('JBoolean.\$type hashCode and ==', () {
using((arena) {
final a = JBoolean(true)..releasedBy(arena);
final b = JBoolean(false)..releasedBy(arena);
expect(a.$type, b.$type);
expect(a.$type.hashCode, b.$type.hashCode);
});
});
}