/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.nativelibs4java.opencl; import static org.junit.Assert.assertFalse; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.logging.Level; import java.util.logging.Logger; import org.junit.Before; import org.junit.BeforeClass; /** * * @author ochafik */ public class InfoGettersTest { @Before public void gc() { System.gc(); try { Thread.sleep(100); } catch (InterruptedException ex) { Logger.getLogger(InfoGettersTest.class.getName()).log(Level.SEVERE, null, ex); } System.gc(); } CLProgram createProgram() { CLProgram pg = createContext().createProgram("__kernel void f(__global int* a) {}"); try { pg.build(); } catch (CLBuildException ex) { assertFalse(ex.toString(), true); } return pg; } CLPlatform createPlatform() { return JavaCL.listPlatforms()[0]; } CLDevice createDevice() { return createPlatform().listAllDevices(true)[0]; } CLContext ctx; CLContext createContext() { if (ctx == null) ctx = createPlatform().createContext(null, createDevice()); return ctx; } CLKernel createKernel() { try { return createProgram().createKernels()[0]; } catch (CLBuildException ex) { throw new RuntimeException("Failed to create kernel", ex); } } CLEvent createEvent() { CLContext c = createContext(); return c.createBuffer(CLMem.Usage.Input, Integer.class, 10).mapLater(c.createDefaultQueue(), CLMem.MapFlags.Read).getSecond(); } CLSampler createSampler() { return createContext().createSampler(true, CLSampler.AddressingMode.ClampToEdge, CLSampler.FilterMode.Linear); } CLQueue createQueue() { CLContext c = createContext(); CLDevice d = c.getDevices()[0]; return d.createQueue(c); } @org.junit.Test public void CLProgramGetters() { testGetters(createProgram()); } @org.junit.Test public void CLKernelGetters() { testGetters(createKernel()); } @org.junit.Test public void CLMemGetters() { testGetters(createContext().createBuffer(CLMem.Usage.Input, Byte.class, 10)); testGetters(createContext().createBuffer(CLMem.Usage.Output, Byte.class, 10)); } @org.junit.Test public void CLQueueGetters() { testGetters(createQueue()); } @org.junit.Test public void CLDeviceGetters() { testGetters(createDevice()); } @org.junit.Test public void CLPlatformGetters() { testGetters(createPlatform()); } @org.junit.Test public void CLContextGetters() { testGetters(createContext()); } @org.junit.Test public void CLEventGetters() { testGetters(createEvent()); } @org.junit.Test public void CLSamplerGetters() { testGetters(createSampler()); } public static void testGetters(Object instance) { if (instance == null) return; Logger log = Logger.getLogger(instance.getClass().getName()); for (Method m : instance.getClass().getDeclaredMethods()) { if (Modifier.isStatic(m.getModifiers())) continue; if (!Modifier.isPublic(m.getModifiers())) continue; if (m.getParameterTypes().length != 0) continue; String name = m.getName(); if (name.contains("ProfilingCommand")) continue; boolean isToString = name.equals("toString"); if (name.startsWith("get") && name.length() > 3 || name.startsWith("has") && name.length() > 3 || name.startsWith("is") && name.length() > 2 || isToString && !Modifier.isPublic(m.getDeclaringClass().getModifiers())) { String msg = "Failed to call " + m; try { m.invoke(instance); } catch (IllegalAccessException ex) { if (!isToString) log.log(Level.WARNING, msg, ex); } catch (InvocationTargetException ex) { Throwable cause = ex.getCause(); if (!(cause instanceof UnsupportedOperationException)) { log.log(Level.SEVERE, msg, ex.getCause()); assertFalse(msg, true); } } catch (Exception ex) { log.log(Level.SEVERE, msg, ex); } } } } }