Started to add unit tests.

Refactored IntegerArrayList, which is now not needed anymore (who implemented this in the first place?)
Auto-Formatted DPointSetMultiIcon -> it was just so badly formatted I had to do auto formatting to make it readable.

Added test for eva2.tools.StringTools (partly at least)
This commit is contained in:
Fabian Becker 2012-04-20 09:13:21 +00:00
parent dcbb488bb9
commit af82e0e5a2
4 changed files with 386 additions and 475 deletions

View File

@ -8,7 +8,6 @@ import java.awt.Point;
import java.awt.Stroke;
import java.util.ArrayList;
import eva2.tools.IntegerArrayList;
import eva2.tools.chart2d.DArray;
import eva2.tools.chart2d.DBorder;
import eva2.tools.chart2d.DComponent;
@ -37,7 +36,7 @@ public class DPointSetMultiIcon extends DComponent
class JumpManager
{
protected int index = -1;
protected IntegerArrayList jumps = new IntegerArrayList();
protected ArrayList<Integer> jumps = new ArrayList<Integer>();
public void addJump()
{

View File

@ -1,161 +0,0 @@
/**
* Filename: $RCSfile: IntegerArrayList.java,v $
* Purpose: This class is similar to 'java.util.ArrayList', except that it can
* only hold and manage integer values.
* Language: Java
* Compiler: JDK 1.2
* Authors: Fred Rapp
* Version: $Revision: 1.1.1.1 $
* $Date: 2003/07/03 14:59:40 $
* $Author: ulmerh $
* Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
*/
package eva2.tools;
/*==========================================================================*
* CLASS DECLARATION
*==========================================================================*/
/**
* This class is similar to 'java.util.ArrayList', except that it can
* only hold and manage integer values.
*/
public class IntegerArrayList
{
/*-------------------------------------------------------------------------*
* private member variables
*-------------------------------------------------------------------------*/
private int[] integerArray = null;
private int integerCount = 0;
private int initialSize;
private int incrementFactor;
/*------------------------------------------------------------------------*
* constructor
*------------------------------------------------------------------------*/
public IntegerArrayList()
{
// call other constructor with default values
this(100, 3);
}
public IntegerArrayList(int initialSize, int incrementFactor)
{
this.initialSize = initialSize;
this.incrementFactor = incrementFactor;
// create new integer array of initial size
integerArray = new int[initialSize];
}
public void destroy() { integerArray = null; integerCount = 0; }
/*-------------------------------------------------------------------------*
* public methods
*-------------------------------------------------------------------------*/
/**
* Clears the contents of this integer list and sets it back to it's initial state.
*/
public void clear() { integerArray = new int[initialSize]; integerCount = 0; }
/**
* Returns the number of components in this list.
*/
public int size() { return integerCount; }
/**
* Parses given string to integer and adds it to the integer list.
* @return true if parsing was successful, false if an error occured.
*/
public boolean add(String stringValue)
{
boolean success = false;
try {
int value = Integer.parseInt(stringValue);
add(value);
success = true;
}
catch (Exception e) {}
return success;
}
/**
* Adds a new integer value to the integer list.
*/
public void add(int value)
{
// check integer array size
if (integerCount == integerArray.length)
{
// increase size of int array
int old_length = integerArray.length;
int new_length = incrementFactor * old_length;
int[] new_array = new int[new_length];
for (int i=0; i<old_length; i++) {
new_array[i] = integerArray[i];
}
integerArray = new_array;
}
// add given value to array
integerArray[integerCount++] = value;
}
/**
* Returns the integer value at the given position or 'min-value' if out of array bounds.
*/
public int get(int index)
{
if ((index < 0) || (index >= integerCount)) { return Integer.MIN_VALUE; }
return integerArray[index];
}
/**
* Returns the contents of this list as an array of integer values.
* @param exactLength determines if the returned array should have the exactly right length, or if longer arrays are allowed
*/
public int[] getIntegerArray(boolean exactLength)
{
// check if we can simply return our internal integer array
if (!exactLength || (integerArray.length == integerCount)) { return integerArray; }
// make a copy of the array with the exactly right length
int size = integerCount;
int[] new_array = new int[ size];
for (int i=0; i< size; i++) { new_array[i] = integerArray[i]; }
return new_array;
}
/**
* Returns the contents of this list as an array of double values.
*/
public double[] getDoubleArray()
{
// make a copy of the array
int size = integerCount;
double[] new_array = new double[ size];
for (int i=0; i< size; i++) { new_array[i] = integerArray[i]; }
return new_array;
}
/**
* Returns the contents of this list as an array of strings.
*/
public String[] getStringArray()
{
// make a copy of the array
int size = integerCount;
String[] new_array = new String[ size];
for (int i=0; i<size; i++) { new_array[i] = "" + integerArray[i]; }
return new_array;
}
}
/****************************************************************************
* END OF FILE
****************************************************************************/

View File

@ -1,288 +1,299 @@
/**
* Filename: $RCSfile: DPointSet.java,v $
* Purpose:
* Language: Java
* Compiler: JDK 1.3
* Authors: Fabian Hennecke
* Version: $Revision: 1.1.1.1 $
* $Date: 2003/07/03 14:59:42 $
* $Author: ulmerh $
* Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
* Filename: $RCSfile: DPointSet.java,v $ Purpose: Language: Java Compiler: JDK 1.3 Authors: Fabian
* Hennecke Version: $Revision: 1.1.1.1 $ $Date: 2003/07/03 14:59:42 $ $Author: ulmerh $ Copyright
* (c) Dept. Computer Architecture, University of Tuebingen, Germany
*/
package eva2.tools.chart2d;
/*==========================================================================*
* IMPORTS
*==========================================================================*/
/*
* ==========================================================================* IMPORTS
*==========================================================================
*/
import java.awt.*;
import java.awt.* ;
import eva2.tools.IntegerArrayList;
import eva2.tools.math.Mathematics;
import java.util.ArrayList;
/*==========================================================================*
* CLASS DECLARATION
*==========================================================================*/
public class DPointSet extends DComponent {
public class DPointSet extends DComponent
{
protected DPointIcon icon = null;
protected DPointIcon icon = null;
/*-------------------------------------------------------------------------*
* private member variables
*-------------------------------------------------------------------------*/
/*
* -------------------------------------------------------------------------* private member
* variables
*-------------------------------------------------------------------------
*/
protected DIntDoubleMap x, y;
protected boolean connected;
protected Stroke stroke = new BasicStroke();
protected JumpManager jumper = new JumpManager();
protected DIntDoubleMap x, y;
protected boolean connected;
protected Stroke stroke = new BasicStroke();
protected JumpManager jumper = new JumpManager();
/*
* -------------------------------------------------------------------------* constructor
*-------------------------------------------------------------------------
*/
public DPointSet() {
this(10, 2);
}
/*-------------------------------------------------------------------------*
* constructor
*-------------------------------------------------------------------------*/
public DPointSet(){
this(10, 2);
}
public DPointSet(int initial_capacity) {
this(initial_capacity, 2);
}
public DPointSet(int initial_capacity, int length_multiplier) {
this(new DArray(initial_capacity, length_multiplier),
new DArray(initial_capacity, length_multiplier));
}
public DPointSet( int initial_capacity ){
this(initial_capacity, 2);
}
public DPointSet(DIntDoubleMap x_values, DIntDoubleMap y_values) {
if (x_values.getSize() != y_values.getSize()) {
throw new IllegalArgumentException(
"The number of x-values has to be the same than the number of y-values");
}
x = x_values;
y = y_values;
restore();
setDBorder(new DBorder(1, 1, 1, 1));
}
public DPointSet( int initial_capacity, int length_multiplier ){
this( new DArray(initial_capacity, length_multiplier),
new DArray(initial_capacity, length_multiplier) );
}
/*
* -------------------------------------------------------------------------* public methods
*-------------------------------------------------------------------------
*/
public void paint(DMeasures m) {
Graphics2D g = (Graphics2D) m.getGraphics();
g.setStroke(stroke);
if (color != null) {
g.setColor(color);
}
int size = getSize();
if (connected && size > 1) {
jumper.restore();
while (jumper.hasMoreIntervals()) {
int[] interval = jumper.nextInterval();
Point p1 = null, p2;
for (int i = interval[0]; i < interval[1]; i++) {
p2 = m.getPoint(x.getImage(i), y.getImage(i));
if (p1 != null) {
g.drawLine(p1.x, p1.y, p2.x, p2.y);
}
if (icon != null) {
g.setStroke(new BasicStroke());
g.translate(p2.x, p2.y);
icon.paint(g);
g.translate(-p2.x, -p2.y);
g.setStroke(stroke);
}
p1 = p2;
}
}
} else {
Point p;
for (int i = 0; i < size; i++) {
p = m.getPoint(x.getImage(i), y.getImage(i));
if (icon == null) {
g.drawLine(p.x - 1, p.y - 1, p.x + 1, p.y + 1);
g.drawLine(p.x + 1, p.y - 1, p.x - 1, p.y + 1);
} else {
g.setStroke(new BasicStroke());
g.translate(p.x, p.y);
icon.paint(g);
g.translate(-p.x, -p.y);
}
}
}
g.setStroke(new BasicStroke());
}
public DPointSet(DIntDoubleMap x_values, DIntDoubleMap y_values){
if( x_values.getSize() != y_values.getSize() ) throw
new IllegalArgumentException(
"The number of x-values has to be the same than the number of y-values"
);
x = x_values;
y = y_values;
restore();
setDBorder(new DBorder(1,1,1,1));
}
public void addDPoint(DPoint p) {
x.addImage(p.x);
y.addImage(p.y);
rectangle.insert(p);
repaint();
}
/*-------------------------------------------------------------------------*
* public methods
*-------------------------------------------------------------------------*/
public void addDPoint(double x, double y) {
addDPoint(new DPoint(x, y));
}
public void paint( DMeasures m ){
Graphics2D g = (Graphics2D)m.getGraphics();
g.setStroke(stroke);
if( color != null ) g.setColor( color );
int size = getSize();
if( connected && size > 1 ){
jumper.restore();
while( jumper.hasMoreIntervals() ){
int[] interval = jumper.nextInterval();
Point p1 = null, p2;
for( int i=interval[0]; i<interval[1]; i++ ){
p2 = m.getPoint( x.getImage(i), y.getImage(i) );
if( p1 != null)
g.drawLine( p1.x, p1.y, p2.x, p2.y );
if( icon != null ){
g.setStroke( new BasicStroke() );
g.translate(p2.x, p2.y);
icon.paint(g);
g.translate(-p2.x, -p2.y);
g.setStroke( stroke );
}
p1 = p2;
}
}
}
else{
Point p;
for( int i=0; i<size; i++ ){
p = m.getPoint( x.getImage(i), y.getImage(i) );
if( icon == null ){
g.drawLine(p.x - 1, p.y - 1, p.x + 1, p.y + 1);
g.drawLine(p.x + 1, p.y - 1, p.x - 1, p.y + 1);
}
else{
g.setStroke( new BasicStroke() );
g.translate(p.x, p.y);
icon.paint(g);
g.translate(-p.x, -p.y);
}
}
}
g.setStroke( new BasicStroke() );
}
/**
* method causes the DPointSet to interupt the connected painting at the current position
*/
public void jump() {
jumper.addJump();
}
public void addDPoint( DPoint p ){
x.addImage(p.x);
y.addImage(p.y);
rectangle.insert(p);
repaint();
}
/**
* method removes all jump positions if the DPointSet is connected, all points will be painted
* connected to their following point
*/
public void removeJumps() {
jumper.reset();
}
public void addDPoint( double x, double y ){
addDPoint(new DPoint(x, y));
}
/**
* method returns the DPoint at the given index
*
* @param index the index of the DPoint
* @return the DPoint at the given index
*/
public DPoint getDPoint(int index) {
if (index >= x.getSize()) {
System.out.println("getDPoint() index" + index);
System.out.println("x.getSize() " + x.getSize());
throw new ArrayIndexOutOfBoundsException(index);
}
DPoint p = new DPoint(x.getImage(index), y.getImage(index));
p.setIcon(icon);
p.setColor(color);
return p;
}
/**
* method causes the DPointSet to interupt the connected painting at the
* current position
*/
public void jump(){
jumper.addJump();
}
/**
* method puts the given DPoint at the given position in the set
*
* @param index the index of the point
* @param p the point to insert
*/
public void setDPoint(int index, DPoint p) {
if (index >= x.getSize()) {
throw new ArrayIndexOutOfBoundsException(index);
}
rectangle.insert(p);
x.setImage(index, p.x);
y.setImage(index, p.y);
restore();
repaint();
}
/**
* method removes all jump positions
* if the DPointSet is connected, all points will be painted connected to
* their following point
*/
public void removeJumps(){
jumper.reset();
}
/**
* method sets an icon for a better displaying of the point set
*
* @param icon the DPointIcon
*/
public void setIcon(DPointIcon icon) {
this.icon = icon;
if (icon == null) {
setDBorder(new DBorder(1, 1, 1, 1));
} else {
setDBorder(icon.getDBorder());
}
}
/**
* method returns the DPoint at the given index
*
* @param index the index of the DPoint
* @return the DPoint at the given index
*/
public DPoint getDPoint( int index ){
if( index >= x.getSize() ) {
System.out.println("getDPoint() index"+index);
System.out.println("x.getSize() "+x.getSize());
throw new ArrayIndexOutOfBoundsException(index);
}
DPoint p = new DPoint( x.getImage( index ), y.getImage( index ) );
p.setIcon( icon );
p.setColor( color );
return p;
}
/**
* method returns the current icon of the point set
*
* @return the DPointIcon
*/
public DPointIcon getIcon() {
return icon;
}
/**
* method puts the given DPoint at the given position in the set
*
* @param index the index of the point
* @param p the point to insert
*/
public void setDPoint( int index, DPoint p ){
if( index >= x.getSize() ) throw new ArrayIndexOutOfBoundsException(index);
rectangle.insert(p);
x.setImage(index,p.x);
y.setImage(index,p.y);
restore();
repaint();
}
/**
* method sets the stroke of the line if the points were not connected, they now will be
* connected
*
* @param s the new stroke
*/
public void setStroke(Stroke s) {
if (s == null) {
s = new BasicStroke();
}
stroke = s;
repaint();
}
/**
* method sets an icon for a better displaying of the point set
*
* @param icon the DPointIcon
*/
public void setIcon( DPointIcon icon ){
this.icon = icon;
if( icon == null ) setDBorder(new DBorder(1,1,1,1));
else setDBorder( icon.getDBorder() );
}
/**
* method returns the current stroke of the line
*
* @return the stroke
*/
public Stroke getStroke() {
return stroke;
}
/**
* method returns the current icon of the point set
*
* @return the DPointIcon
*/
public DPointIcon getIcon(){
return icon;
}
/**
* Return the minimum y value in the point set.
*
* @return the minimum y value in the point set
*/
public double getMinYVal() {
return y.getMinImageValue();
}
/**
* method sets the stroke of the line
* if the points were not connected, they now will be connected
*
* @param s the new stroke
*/
public void setStroke( Stroke s ){
if( s == null ) s = new BasicStroke();
stroke = s;
repaint();
}
public double getMinPositiveYValue() {
return y.getMinPositiveImageValue();
}
/**
* method returns the current stroke of the line
*
* @return the stroke
*/
public Stroke getStroke(){
return stroke;
}
/**
* Return the minimum y value in the point set.
*
* @return the minimum y value in the point set
*/
public double getMinYVal() {
return y.getMinImageValue();
}
public double getMinPositiveYValue() {
return y.getMinPositiveImageValue();
}
public void setConnected(boolean aFlag) {
boolean changed = !(aFlag == connected);
connected = aFlag;
if (changed) {
repaint();
}
}
public void setConnected( boolean aFlag ){
boolean changed = !( aFlag == connected );
connected = aFlag;
if( changed ) repaint();
}
public void removeAllPoints() {
if (x.getSize() == 0) {
return;
}
x.reset();
y.reset();
jumper.reset();
repaint();
rectangle = DRectangle.getEmpty();
}
public void removeAllPoints(){
if( x.getSize() == 0 ) return;
x.reset();
y.reset();
jumper.reset();
repaint();
rectangle = DRectangle.getEmpty();
}
public String toString() {
String text = "eva2.tools.chart2d.DPointSet[size:" + getSize();
for (int i = 0; i < x.getSize(); i++) {
text += ",(" + x.getImage(i) + "," + y.getImage(i) + ")";
}
text += "]";
return text;
}
public String toString(){
String text = "eva2.tools.chart2d.DPointSet[size:"+getSize();
for( int i=0; i<x.getSize(); i++ )
text += ",("+x.getImage(i)+","+y.getImage(i)+")";
text += "]";
return text;
}
/**
* method returns the index to the nearest
* <code>DPoint</code> in this
* <code>DPointSet</code>.
*
* @return the index to the nearest
* <code>DPoint</code>. -1 if no nearest
* <code>DPoint</code> was found.
*/
public int getNearestDPointIndex(DPoint point) {
double minValue = Double.MAX_VALUE;
int minIndex = -1;
for (int i = 0; i < x.getSize(); i++) {
double dx = point.x - x.getImage(i);
double dy = point.y - y.getImage(i);
double dummy = dx * dx + dy * dy;
if (dummy < minValue) {
minValue = dummy;
minIndex = i;
}
}
return minIndex;
}
/**
* method returns the index to the nearest <code>DPoint</code> in this <code>DPointSet</code>.
*
* @return the index to the nearest <code>DPoint</code>. -1 if no nearest <code>DPoint</code> was found.
*/
public int getNearestDPointIndex(DPoint point){
double minValue = Double.MAX_VALUE;
int minIndex = -1;
for( int i=0; i<x.getSize(); i++ ){
double dx = point.x - x.getImage(i);
double dy = point.y - y.getImage(i);
double dummy = dx*dx + dy*dy;
if (dummy < minValue){
minValue = dummy;
minIndex = i;
}
}
return minIndex;
}
/**
* method returns the nearest
* <code>DPoint</code> in this
* <code>DPointSet</code>.
*
* @return the nearest
* <code>DPoint</code>
*/
public DPoint getNearestDPoint(DPoint point) {
int minIndex = getNearestDPointIndex(point);
/**
* method returns the nearest <code>DPoint</code> in this <code>DPointSet</code>.
*
* @return the nearest <code>DPoint</code>
*/
public DPoint getNearestDPoint(DPoint point){
int minIndex = getNearestDPointIndex(point);
if(minIndex == -1) return null;
else return new DPoint(x.getImage(minIndex), y.getImage(minIndex));
}
if (minIndex == -1) {
return null;
} else {
return new DPoint(x.getImage(minIndex), y.getImage(minIndex));
}
}
// public int getSize(){
// int size = x.getSize();
@ -293,76 +304,79 @@ public class DPointSet extends DComponent
// );
// return size;
// }
/**
*
*/
public int getSize(){ // testhu
int size = x.getSize();
if( size <= y.getSize() )
return size;
return x.getSize();
}
/**
*
*/
public int getSize() { // testhu
int size = x.getSize();
if (size <= y.getSize()) {
return size;
}
return x.getSize();
}
protected void restore() {
if (getSize() == 0) {
rectangle = DRectangle.getEmpty();
return;
}
double min_x = x.getMinImageValue(),
max_x = x.getMaxImageValue(),
min_y = y.getMinImageValue(),
max_y = y.getMaxImageValue();
if (Mathematics.areFinite(min_x, max_x, min_y, max_y) == -1) {
rectangle = new DRectangle(min_x, min_y, max_x - min_x, max_y - min_y);
}
}
protected void restore(){
if( getSize() == 0){
rectangle = DRectangle.getEmpty();
return;
}
double min_x = x.getMinImageValue(),
max_x = x.getMaxImageValue(),
min_y = y.getMinImageValue(),
max_y = y.getMaxImageValue();
if (Mathematics.areFinite(min_x, max_x, min_y, max_y) == -1)
rectangle = new DRectangle(min_x, min_y, max_x - min_x, max_y - min_y );
// else
// System.err.println("Warning, rectangle not restored due to invalid (infinite/NaN) values.");
}
/**
* this class stores the jump positions (see this.jump)
*/
class JumpManager {
/**
* this class stores the jump positions (see this.jump)
*/
class JumpManager{
protected IntegerArrayList jumps = new IntegerArrayList();
protected int index = -1;
protected ArrayList<Integer> jumps = new ArrayList<Integer>();
protected int index = -1;
public void addJump(){
jumps.add(getSize());
}
public void addJump() {
jumps.add(getSize());
}
public int[] nextInterval(){
int no_jumps = jumps.size();
if( index >= no_jumps ) throw
new ArrayIndexOutOfBoundsException("No more intervals in JumpManager");
public int[] nextInterval() {
int noJumps = jumps.size();
if (index >= noJumps) {
throw new ArrayIndexOutOfBoundsException("No more intervals in JumpManager");
}
int[] inter = new int[2];
int[] inter = new int[2];
if( index == -1 ) inter[0] = 0;
else inter[0] = jumps.get(index);
if (index == -1) {
inter[0] = 0;
} else {
inter[0] = jumps.get(index);
}
index++;
index++;
if( index < no_jumps ) inter[1] = jumps.get(index);
else inter[1] = getSize();
if (index < noJumps) {
inter[1] = jumps.get(index);
} else {
inter[1] = getSize();
}
return inter;
}
return inter;
}
public boolean hasMoreIntervals(){
return index < jumps.size();
}
public boolean hasMoreIntervals() {
return index < jumps.size();
}
public void restore(){
index = -1;
}
public void restore() {
index = -1;
}
public void reset(){
index = -1;
jumps.clear();
}
}
public void reset() {
index = -1;
jumps.clear();
}
}
}
/****************************************************************************
* END OF FILE
****************************************************************************/

View File

@ -0,0 +1,59 @@
package eva2.tools;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.junit.After;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author becker
*/
public class StringToolsTest {
public StringToolsTest() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Test of humaniseCamelCase method, of class StringTools.
*/
@Test
public void testHumaniseCamelCase() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("camelCase", "Camel Case");
map.put("Camel Case", "Camel Case");
map.put("thisIsAwesome", "This Is Awesome");
map.put("THQIsNice", "THQ Is Nice");
map.put("iLikeABC", "I Like ABC");
String key, value;
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry pairs = (Map.Entry) iter.next();
key = (String) pairs.getKey();
value = (String) pairs.getValue();
String result = StringTools.humaniseCamelCase(key);
assertEquals(value, result);
}
}
/**
* Test of upcaseFirst method, of class StringTools.
*/
@Test
public void testUpcaseFirst() {
assertEquals("Camel", StringTools.upcaseFirst("camel"));
assertEquals("UpWeGo", StringTools.upcaseFirst("upWeGo"));
}
}