package com.oracle.truffle.llvm.tests.interop;
import java.util.ArrayList;
import java.util.Collection;
import org.graalvm.polyglot.Value;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public final class FitsInTest extends InteropTestBase {
private static Value testFitsIn;
@BeforeClass
public static void loadTestBitcode() {
Value testLibrary = loadTestBitcodeValue("fitsIn.c");
testFitsIn = testLibrary.getMember("test_fits_in");
}
@Parameters(name = "{0}")
public static Collection<Object[]> data() {
ArrayList<Object[]> tests = new ArrayList<>();
tests.add(new Object[]{(byte) 42});
tests.add(new Object[]{(short) 42});
tests.add(new Object[]{(short) 8472});
tests.add(new Object[]{42});
tests.add(new Object[]{8472});
tests.add(new Object[]{1000000});
tests.add(new Object[]{42L});
tests.add(new Object[]{8472L});
tests.add(new Object[]{1000000L});
tests.add(new Object[]{2000000000000L});
tests.add(new Object[]{5.0f});
tests.add(new Object[]{5.3f});
tests.add(new Object[]{Float.MIN_VALUE});
tests.add(new Object[]{Float.MAX_VALUE});
tests.add(new Object[]{5.0d});
tests.add(new Object[]{5.3d});
tests.add(new Object[]{Double.MIN_VALUE});
tests.add(new Object[]{Double.MAX_VALUE});
tests.add(new Object[]{"string"});
return tests;
}
@Parameter(0) public Object value;
@Test
public void checkNumbers() {
Value v = runWithPolyglot.getPolyglotContext().asValue(value);
int ret = testFitsIn.execute(v).asInt();
Assert.assertEquals("fits_in_i8", v.fitsInByte(), (ret & 1) != 0);
Assert.assertEquals("fits_in_i16", v.fitsInShort(), (ret & 2) != 0);
Assert.assertEquals("fits_in_i32", v.fitsInInt(), (ret & 4) != 0);
Assert.assertEquals("fits_in_i64", v.fitsInLong(), (ret & 8) != 0);
Assert.assertEquals("fits_in_float", v.fitsInFloat(), (ret & 16) != 0);
Assert.assertEquals("fits_in_double", v.fitsInDouble(), (ret & 32) != 0);
}
}