Project: BoneJ
package org.doube.bonej;
 
import static org.junit.Assert.*; 
 
import java.awt.Rectangle; 
 
import ij.ImagePlus; 
import ij.gui.Roi; 
import ij.plugin.frame.RoiManager; 
 
import org.doube.geometry.TestDataMaker; 
import org.junit.Test; 
 
public class VolumeFractionTest { 
 private ImagePlus rod = TestDataMaker.rod(25664); 
 private ImagePlus sphere = TestDataMaker.sphere(64); 
 private ImagePlus brick = TestDataMaker.brick(326496); 
 private VolumeFraction vf = new VolumeFraction(); 
 private double[] expectedRod = { 826368256 * 128 * 128 }; 
 private double[] expectedSphere = { 1097342130 * 130 * 131 }; 
 private double[] expectedBrick = { 32 * 64 * 9634 * 66 * 98 }; 
 private double[] quarterRod = { 206592256 * 64 * 64 }; 
 private double[] quarterSphere = { 27433565 * 65 * 131 }; 
 private double[] quarterBrick = { 16 * 32 * 9617 * 33 * 98 }; 
 
 @Test 
  double[] vols = vf.getVolumes(rod, 1255); 
  assertArrayEquals(expectedRod, vols, 0); 
 
  vols = vf.getVolumes(sphere, 1255); 
  assertArrayEquals(expectedSphere, vols, 0); 
 
  vols = vf.getVolumes(brick, 1255); 
  assertArrayEquals(expectedBrick, vols, 0); 
   
  int w = rod.getWidth(); 
  rod.setRoi(new Rectangle(00, w / 2, w / 2)); 
  vols = vf.getVolumes(rod, 1255); 
  assertArrayEquals(quarterRod, vols, 0); 
   
  w = sphere.getWidth(); 
  sphere.setRoi(new Rectangle(00, w / 2, w / 2)); 
  vols = vf.getVolumes(sphere, 1255); 
  assertArrayEquals(quarterSphere, vols, 0); 
   
  w = brick.getWidth(); 
  int h = brick.getHeight(); 
  brick.setRoi(new Rectangle(00, w / 2, h / 2)); 
  vols = vf.getVolumes(brick, 1255); 
  assertArrayEquals(quarterBrick, vols, 0); 
   
  rod.setRoi(new Rectangle(0000)); 
  sphere.setRoi(new Rectangle(0000)); 
  brick.setRoi(new Rectangle(0000)); 
 
 
 @Test 
  RoiManager roiMan = new RoiManager(); 
  int w = rod.getWidth(); 
  roiMan.addRoi(new Roi(new Rectangle(00, w / 2, w / 2))); 
  double[] vols = vf.getVolumes(rod, 1255true); 
  assertArrayEquals(quarterRod, vols, 0); 
  roiMan.close(); 
   
  roiMan = new RoiManager(); 
  w = sphere.getWidth(); 
  roiMan.addRoi(new Roi(new Rectangle(00, w / 2, w / 2))); 
  vols = vf.getVolumes(sphere, 1255true); 
  assertArrayEquals(quarterSphere, vols, 0); 
  roiMan.close(); 
   
  roiMan = new RoiManager(); 
  w = brick.getWidth(); 
  int h = brick.getHeight(); 
  roiMan.addRoi(new Roi(new Rectangle(00, w / 2, h / 2))); 
  vols = vf.getVolumes(brick, 1255true); 
  assertArrayEquals(quarterBrick, vols, 0); 
  roiMan.close(); 
 
 
 @Test 
  double[] vols = vf.getSurfaceVolume(rod, 12551); 
  assertArrayEquals(expectedRod, vols, 3000); 
 
  vols = vf.getSurfaceVolume(sphere, 12551); 
  assertArrayEquals(expectedSphere, vols, 2000); 
 
  vols = vf.getSurfaceVolume(brick, 12551); 
  assertArrayEquals(expectedBrick, vols, 200); 
 
 
 @Test 
  RoiManager roiMan = new RoiManager(); 
  int w = rod.getWidth(); 
  roiMan.addRoi(new Roi(new Rectangle(00, w / 2, w / 2))); 
  double[] vols = vf.getSurfaceVolume(rod, 12551truefalse); 
  assertArrayEquals(quarterRod, vols, 500); 
  roiMan.close(); 
   
  roiMan = new RoiManager(); 
  w = sphere.getWidth(); 
  roiMan.addRoi(new Roi(new Rectangle(00, w / 2, w / 2))); 
  vols = vf.getSurfaceVolume(sphere, 12551truefalse); 
  assertArrayEquals(quarterSphere, vols, 300); 
  roiMan.close(); 
   
  roiMan = new RoiManager(); 
  w = brick.getWidth(); 
  int h = brick.getHeight(); 
  roiMan.addRoi(new Roi(new Rectangle(00, w / 2, h / 2))); 
  vols = vf.getSurfaceVolume(brick, 12551truefalse); 
  assertArrayEquals(quarterBrick, vols, 200); 
  roiMan.close(); 
 
 
}