Package st.gravel.support.compiler

Source Code of st.gravel.support.compiler.LiteralsTest

package st.gravel.support.compiler;

import static org.junit.Assert.assertEquals;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.junit.Before;
import org.junit.Test;

import st.gravel.core.Symbol;
import st.gravel.support.compiler.testtools.ClassBuilder;
import st.gravel.support.compiler.testtools.TestBootstrap;
import st.gravel.support.jvm.runtime.ImageBootstrapper;


public class LiteralsTest {

  @Before
  public void setUp() {
    TestBootstrap.getSingleton();
  }

  @Test
  public void testSymbolLiteral() throws InstantiationException,
      IllegalAccessException, IllegalArgumentException,
      InvocationTargetException, NoSuchMethodException, SecurityException {

    Class classA = new ClassBuilder("ClassA_testSymbolLiteral")
        .method("foo ^#aap")
        .method("bar ^#aap")
        .build();

    Object classAObj = classA.newInstance();
    Method method = classAObj.getClass().getMethod("foo");
    Object result = method.invoke(classAObj);
    assertEquals(Symbol.value("aap"), result);
  }


  @Test
  public void testByteArrayLiteral() throws InstantiationException,
      IllegalAccessException, IllegalArgumentException,
      InvocationTargetException, NoSuchMethodException, SecurityException {

    Class classA = new ClassBuilder("ClassA_testByteArrayLiteral")
        .method("foo ^#[0 1 127 128 255 0]")
        .method("bar ^#[0 1 127 128 255 0]")
        .method("eq ^self foo == self bar")
        .build();

    Object classAObj = classA.newInstance();
    Method foo = classAObj.getClass().getMethod("foo");
    Method bar = classAObj.getClass().getMethod("bar");
    Method eq = classAObj.getClass().getMethod("eq");
    Object fooValue = foo.invoke(classAObj);
    Object barValue = bar.invoke(classAObj);
    Object eqValue = eq.invoke(classAObj);
    assertEquals(Boolean.TRUE, eqValue);
    assertEquals(fooValue, barValue);
    byte[] arr = (byte[]) fooValue;
    assertEquals(0, arr[0]);
    assertEquals(1, arr[1]);
    assertEquals(127, arr[2]);
    assertEquals(-128, arr[3]);
    assertEquals(-1, arr[4]);
    assertEquals(0, arr[5]);
    assertEquals(6, arr.length);
  }

  @Test
  public void testArrayLiteral() throws InstantiationException,
      IllegalAccessException, IllegalArgumentException,
      InvocationTargetException, NoSuchMethodException, SecurityException {

    Class classA = new ClassBuilder("ClassA_testArrayLiteral")
        .method("foo ^#(aap 1 nil)")
        .method("bar ^#(aap 1 nil)")
        .method("eq ^self foo == self bar")
        .build();

    Object classAObj = classA.newInstance();
    Method foo = classAObj.getClass().getMethod("foo");
    Method bar = classAObj.getClass().getMethod("bar");
    Method eq = classAObj.getClass().getMethod("eq");
    Object fooValue = foo.invoke(classAObj);
    Object barValue = bar.invoke(classAObj);
    Object eqValue = eq.invoke(classAObj);
    assertEquals(Boolean.TRUE, eqValue);
    assertEquals(fooValue, barValue);
    Object[] arr = (Object[]) fooValue;
    assertEquals(3, arr.length);
  }

  @Test
  public void testLargeIntegerLiteral() throws InstantiationException,
      IllegalAccessException, IllegalArgumentException,
      InvocationTargetException, NoSuchMethodException, SecurityException {

    Class classA = new ClassBuilder("ClassA_testLargeIntegerLiteral")
        .method("foo ^12389471234798172348979183249871234")
        .method("bar ^12389471234798172348979183249871234")
        .build();

    Object classAObj = classA.newInstance();
    Method foo = classAObj.getClass().getMethod("foo");
    Method bar = classAObj.getClass().getMethod("bar");
    Object fooValue = foo.invoke(classAObj);
    Object barValue = bar.invoke(classAObj);
    assertEquals(fooValue, barValue);
  }



}
TOP

Related Classes of st.gravel.support.compiler.LiteralsTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.