/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ngmf;
import oms3.Compound;
import oms3.annotations.Execute;
import oms3.annotations.Finalize;
import oms3.annotations.In;
import oms3.annotations.Initialize;
import oms3.annotations.Out;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author olafdavid
*/
public class CylinderTest {
static int inits = 0;
// all annotations are in the CompInfo Class
public static class CircleArea {
public double radius; // (2)
public double area; // (2)
public void initialize() {
inits++;
}
public void done() {
inits--;
}
public void execute() {
area = Math.PI * radius * radius; // (3)
}
}
public abstract static class CircleAreaCompInfo {
@In public double radius; // (2)
@Out public double area; // (2)
@Initialize
abstract public void initialize();
@Finalize
abstract public void done();
@Execute
abstract public void execute(); //(3)
}
public static class CirclePerimeter {
@In public double radius;
@Out public double perimeter;
@Initialize
public void initialize() {
inits++;
}
@Finalize
public void done() {
inits--;
}
@Execute
public void execute() {
perimeter = 2 * Math.PI * radius;
}
}
public class CylSurface {
@In public double area; // (2)
@In public double height;
@In public double perimeter;
@Out public double surface; // (2)
@Initialize
public void initialize() {
inits++;
}
@Finalize
public void done() {
inits--;
}
@Execute
public void execute() {
surface = 2 * area + height * perimeter; // (3)
}
}
public class CylinderCompound extends Compound { // (1)
@In public double rad;
@In public double height;
@Out public double surface; // (2)
CirclePerimeter p = new CirclePerimeter(); // (3)
CylSurface s = new CylSurface();
CircleArea a = new CircleArea();
public CylinderCompound() { // (4)
out2in(a, "area", s, "area");
out2in(p, "perimeter", s, "perimeter");
in2in("height", s, "height"); // (6)
in2in("rad", a, "radius");
in2in("rad", p, "radius");
out2out("surface", s, "surface"); // (7)
}
}
@Test
public void init() throws Exception {
final CylinderCompound c = new CylinderCompound();
c.initializeComponents();
assertEquals(3, inits);
c.finalizeComponents();
assertEquals(0, inits);
}
@Test
public void cylinder() throws Exception {
final CylinderCompound c = new CylinderCompound();
// c.addListener(new Listeners.Printer());
c.height = 20.0;
c.rad = 2.5;
c.execute();
// System.out.println(c.surface);
double s = 2 * (Math.PI * c.rad * c.rad) + (2 * Math.PI * c.rad) * c.height;
assertEquals(c.surface, s, 0.0000001);
}
}