initial setup
This commit is contained in:
261
test/Aout.java
Normal file
261
test/Aout.java
Normal file
@@ -0,0 +1,261 @@
|
||||
|
||||
/** Helper methods.
|
||||
* Arrays converted to array expressions (toString(...))
|
||||
* and prettyprinting (toPrettyString(...)).
|
||||
* @author Jaanus
|
||||
*/
|
||||
public class Aout {
|
||||
|
||||
/** Just testing. */
|
||||
public static void main (String[] args) {
|
||||
System.out.println (toString (new String[]
|
||||
{null, "", "0", "a\nb", " ", " ", "\t", "möäüÕga", "\"", "\\", "\'"}));
|
||||
} // main
|
||||
|
||||
/** Conversion for int[][] . */
|
||||
public static String toString (int[][] m) {
|
||||
if (m == null) return "(int[][])null";
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append ("new int[][]{");
|
||||
for (int i=0; i < m.length; i++) {
|
||||
if (i > 0) sb.append (", ");
|
||||
if (m[i] == null)
|
||||
sb.append ("null");
|
||||
else {
|
||||
sb.append ("{");
|
||||
for (int j=0; j < m[i].length; j++) {
|
||||
if (j > 0) sb.append (", ");
|
||||
sb.append (String.valueOf (m[i][j]));
|
||||
} // for j
|
||||
sb.append ("}");
|
||||
}
|
||||
} // for i
|
||||
sb.append ("}");
|
||||
return sb.toString();
|
||||
} // toString int[][]
|
||||
|
||||
/** Conversion for double[][] . */
|
||||
public static String toString (double[][] m) {
|
||||
if (m == null) return "(double[][])null";
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append ("new double[][]{");
|
||||
for (int i=0; i < m.length; i++) {
|
||||
if (i > 0) sb.append (", ");
|
||||
if (m[i] == null)
|
||||
sb.append ("null");
|
||||
else {
|
||||
sb.append ("{");
|
||||
for (int j=0; j < m[i].length; j++) {
|
||||
if (j > 0) sb.append (", ");
|
||||
sb.append (String.valueOf (m[i][j]));
|
||||
} // for j
|
||||
sb.append ("}");
|
||||
}
|
||||
} // for i
|
||||
sb.append ("}");
|
||||
return sb.toString();
|
||||
} // toString double[][]
|
||||
|
||||
/** Conversion for int[] . */
|
||||
public static String toString (int[] m) {
|
||||
if (m == null) return "(int[])null";
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append ("new int[]{");
|
||||
for (int i=0; i < m.length; i++) {
|
||||
if (i > 0) sb.append (", ");
|
||||
sb.append (String.valueOf (m[i]));
|
||||
} // for i
|
||||
sb.append ("}");
|
||||
return sb.toString();
|
||||
} // toString int[]
|
||||
|
||||
/** Conversion for double[] . */
|
||||
public static String toString (double[] m) {
|
||||
if (m == null) return "(double[])null";
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append ("new double[]{");
|
||||
for (int i=0; i < m.length; i++) {
|
||||
if (i > 0) sb.append (", ");
|
||||
sb.append (String.valueOf (m[i]));
|
||||
} // for i
|
||||
sb.append ("}");
|
||||
return sb.toString();
|
||||
} // toString double[]
|
||||
|
||||
/** Conversion for int . */
|
||||
public static String toString (int n) {
|
||||
return String.valueOf (n);
|
||||
} // toString int
|
||||
|
||||
/** Conversion for double . */
|
||||
public static String toString (double d) {
|
||||
return String.valueOf (d);
|
||||
} // toString double
|
||||
|
||||
/** Conversion for String . */
|
||||
public static String toString (String s) {
|
||||
if (s == null)
|
||||
return "null";
|
||||
StringBuffer tmp = new StringBuffer();
|
||||
for (int k=0; k < s.length(); k++) {
|
||||
char c = s.charAt (k);
|
||||
switch (c) {
|
||||
case '\n': { tmp.append ("\\n"); break; }
|
||||
case '\t': { tmp.append ("\\t"); break; }
|
||||
case '\b': { tmp.append ("\\b"); break; }
|
||||
case '\f': { tmp.append ("\\f"); break; }
|
||||
case '\r': { tmp.append ("\\r"); break; }
|
||||
case '\\': { tmp.append ("\\\\"); break; }
|
||||
case '\'': { tmp.append ("\\\'"); break; }
|
||||
case '\"': { tmp.append ("\\\""); break; }
|
||||
// TODO!!! add more escapes if needed
|
||||
default: tmp.append (c);
|
||||
} // switch
|
||||
} // for k
|
||||
return "\"" + tmp.toString() + "\"";
|
||||
} // toString String
|
||||
|
||||
/** Conversion for String[] . */
|
||||
public static String toString (String[] m) {
|
||||
if (m == null)
|
||||
return "(String[])null";
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append ("new String[]{");
|
||||
for (int i=0; i < m.length; i++) {
|
||||
if (i > 0)
|
||||
sb.append (", ");
|
||||
sb.append (toString (m[i]));
|
||||
} // for i
|
||||
sb.append ("}");
|
||||
return sb.toString();
|
||||
} // toString String[]
|
||||
|
||||
/** Double number as string with the given length.
|
||||
* @param d argument
|
||||
* @param len length
|
||||
* @return d as string
|
||||
*/
|
||||
public static String fString (double d, int len) {
|
||||
if (len<1)
|
||||
return "";
|
||||
// pad on ruum punkti ja v6imaliku miinusm2rgi jaoks
|
||||
int pad = 1 + ((d<0)?1:0);
|
||||
// loga on t2isosa numbrikohtade arv
|
||||
int loga = (int)Math.max (0., Math.log10 (Math.abs (d))) + 1;
|
||||
// kk on punkti j2rel olevate kohtade arv
|
||||
int kk = (int)Math.max (len-pad-loga, 0);
|
||||
String fs = "%" + String.valueOf (len) + "." +
|
||||
String.valueOf (kk) + "f";
|
||||
String res = "";
|
||||
try {
|
||||
res = String.format ((java.util.Locale)null, fs, d);
|
||||
} catch (IllegalArgumentException e) {
|
||||
res = String.valueOf (d);
|
||||
} // try
|
||||
return res;
|
||||
} // fString
|
||||
|
||||
/** Prettyprint for double[][] .
|
||||
* @param m array to print
|
||||
* @param fs format string for element
|
||||
* @return m array as multiline string
|
||||
*/
|
||||
public static String toPrettyString (double[][] m, String fs) {
|
||||
String nl = System.getProperty ("line.separator");
|
||||
if (m == null)
|
||||
return "nullpointer instead of this matrix" + nl;
|
||||
// throw new NullPointerException ("(double[][])null"); // alternative
|
||||
if (m.length == 0)
|
||||
return "this matrix is empty" + nl;
|
||||
StringBuffer sb = new StringBuffer(nl);
|
||||
for (int i=0; i < m.length; i++) {
|
||||
if (m[i] == null)
|
||||
sb.append ("nullpointer instead of this row" + nl);
|
||||
else {
|
||||
if (m[i].length == 0)
|
||||
sb.append ("this row is empty");
|
||||
else {
|
||||
for (int j=0; j < m[i].length; j++) {
|
||||
String elem = "";
|
||||
if (fs == null || fs.length() < 1) {
|
||||
// TODO!!! keera siit, kui tahad pilti muuta
|
||||
elem = fString (m[i][j], 6) + "\t";
|
||||
} else {
|
||||
try {
|
||||
elem = String.format ((java.util.Locale)null,
|
||||
fs, m[i][j]) + " "; // remove space if needed
|
||||
} catch (IllegalArgumentException e) {
|
||||
elem = fString (m[i][j], 6) + "\t";
|
||||
} // try
|
||||
}
|
||||
sb.append (elem);
|
||||
} // for j
|
||||
} // nonempty row
|
||||
sb.append (nl);
|
||||
} // non-null row
|
||||
} // for i
|
||||
return sb.toString();
|
||||
} // toPrettyString double[][]
|
||||
|
||||
/** Version of double[][] prettyprint without format string. */
|
||||
public static String toPrettyString (double[][] m) {
|
||||
return toPrettyString (m, null);
|
||||
} // toPrettyString double[][]
|
||||
|
||||
/** Prettyprint for int[][] .
|
||||
* @param m array to print
|
||||
* @param fs format string for element
|
||||
* @return m array as a multiline string
|
||||
*/
|
||||
public static String toPrettyString (int[][] m, String fs) {
|
||||
String nl = System.getProperty ("line.separator");
|
||||
if (m == null)
|
||||
return "nullpointer instead of this matrix" + nl;
|
||||
// throw new NullPointerException ("(double[][])null"); // alternative
|
||||
if (m.length == 0)
|
||||
return "this matrix is empty" + nl;
|
||||
StringBuffer sb = new StringBuffer(nl);
|
||||
for (int i=0; i < m.length; i++) {
|
||||
if (m[i] == null)
|
||||
sb.append ("nullpointer instead of this row" + nl);
|
||||
else {
|
||||
if (m[i].length == 0)
|
||||
sb.append ("this row is empty");
|
||||
else {
|
||||
for (int j=0; j < m[i].length; j++) {
|
||||
String elem = "";
|
||||
if (fs == null || fs.length() < 1)
|
||||
fs = "%5d"; // TODO!!! keera siit, kui vaja
|
||||
try {
|
||||
elem = String.format ((java.util.Locale)null,
|
||||
fs, m[i][j]) + " "; // remove space if needed
|
||||
} catch (IllegalArgumentException e) {
|
||||
elem = String.valueOf (m[i][j]) + "\t";
|
||||
} // try
|
||||
sb.append (elem);
|
||||
} // for j
|
||||
} // nonempty row
|
||||
sb.append (nl);
|
||||
} // non-null row
|
||||
} // for i
|
||||
return sb.toString();
|
||||
} // toPrettyString int[][]
|
||||
|
||||
/** Version of int[][] prettyprint without format string. */
|
||||
public static String toPrettyString (int[][] m) {
|
||||
return toPrettyString (m, null);
|
||||
} // toPrettyString int[][]
|
||||
|
||||
/** Prettyprint for String[] . */
|
||||
public static String toPrettyString (String[] m) {
|
||||
String nl = System.getProperty ("line.separator");
|
||||
if (m == null) return "(String[])null";
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i=0; i < m.length; i++) {
|
||||
sb.append (toString (m[i]) + nl);
|
||||
} // for i
|
||||
return sb.toString();
|
||||
} // toPrettyString String[]
|
||||
|
||||
} // Aout
|
||||
|
||||
148
test/BallsTest.java
Normal file
148
test/BallsTest.java
Normal file
@@ -0,0 +1,148 @@
|
||||
import static org.junit.Assert.*;
|
||||
import org.junit.Test;
|
||||
|
||||
public class BallsTest {
|
||||
|
||||
/** Number of milliseconds allowed to spend for sorting 1 million elements */
|
||||
public static int threshold = 25;
|
||||
|
||||
/** Test data */
|
||||
static Balls.Color[] balls = null;
|
||||
|
||||
/** Number of red balls */
|
||||
static int rCount = 0;
|
||||
|
||||
/** Correctness check for the result */
|
||||
static boolean check (Balls.Color[] balls, int r) {
|
||||
int len = balls.length;
|
||||
if (len == 0)
|
||||
return true;
|
||||
for (int i=0; i < r; i++)
|
||||
if (balls[i] != Balls.Color.red)
|
||||
return false;
|
||||
for (int i=r; i < len; i++)
|
||||
if (balls[i] != Balls.Color.green)
|
||||
return false;
|
||||
return true;
|
||||
} // check
|
||||
|
||||
@Test (timeout=1000)
|
||||
public void testFunctionality() {
|
||||
balls = new Balls.Color [100000];
|
||||
rCount = 0;
|
||||
for (int i=0; i < balls.length; i++) {
|
||||
if (Math.random() < 0.5) {
|
||||
balls[i] = Balls.Color.red;
|
||||
rCount++;
|
||||
} else {
|
||||
balls[i] = Balls.Color.green;
|
||||
}
|
||||
}
|
||||
Balls.reorder (balls);
|
||||
assertTrue ("Result incorrect", check (balls, rCount));
|
||||
}
|
||||
|
||||
@Test (timeout=1000)
|
||||
public void testShort() {
|
||||
balls = new Balls.Color [1];
|
||||
if (Math.random() < 0.5) {
|
||||
balls[0] = Balls.Color.red;
|
||||
rCount = 1;
|
||||
} else {
|
||||
balls[0] = Balls.Color.green;
|
||||
rCount = 0;
|
||||
}
|
||||
Balls.reorder (balls);
|
||||
assertTrue ("One element array not working", check (balls, rCount));
|
||||
balls = new Balls.Color [0];
|
||||
rCount = 0;
|
||||
Balls.reorder (balls);
|
||||
assertTrue ("Zero element array not working", check (balls, rCount));
|
||||
balls = new Balls.Color [100000];
|
||||
rCount = 0;
|
||||
for (int i=0; i < balls.length; i++) {
|
||||
if (Math.random() < 0.5) {
|
||||
balls[i] = Balls.Color.red;
|
||||
rCount++;
|
||||
} else {
|
||||
balls[i] = Balls.Color.green;
|
||||
}
|
||||
}
|
||||
Balls.reorder (balls);
|
||||
assertTrue ("Result incorrect", check (balls, rCount));
|
||||
}
|
||||
|
||||
@Test (timeout=1000)
|
||||
public void testAllGreen() {
|
||||
balls = new Balls.Color [100000];
|
||||
rCount = 0;
|
||||
for (int i=0; i < balls.length; i++) {
|
||||
balls[i] = Balls.Color.green;
|
||||
}
|
||||
Balls.reorder (balls);
|
||||
assertTrue ("Result incorrect for all green", check (balls, rCount));
|
||||
balls = new Balls.Color [100000];
|
||||
rCount = 0;
|
||||
for (int i=0; i < balls.length; i++) {
|
||||
if (Math.random() < 0.5) {
|
||||
balls[i] = Balls.Color.red;
|
||||
rCount++;
|
||||
} else {
|
||||
balls[i] = Balls.Color.green;
|
||||
}
|
||||
}
|
||||
Balls.reorder (balls);
|
||||
assertTrue ("Result incorrect", check (balls, rCount));
|
||||
}
|
||||
|
||||
@Test (timeout=1000)
|
||||
public void testAllRed() {
|
||||
balls = new Balls.Color [100000];
|
||||
rCount = 0;
|
||||
for (int i=0; i < balls.length; i++) {
|
||||
balls[i] = Balls.Color.red;
|
||||
rCount++;
|
||||
}
|
||||
Balls.reorder (balls);
|
||||
assertTrue ("Result incorrect for all red", check (balls, rCount));
|
||||
balls = new Balls.Color [100000];
|
||||
rCount = 0;
|
||||
for (int i=0; i < balls.length; i++) {
|
||||
if (Math.random() < 0.5) {
|
||||
balls[i] = Balls.Color.red;
|
||||
rCount++;
|
||||
} else {
|
||||
balls[i] = Balls.Color.green;
|
||||
}
|
||||
}
|
||||
Balls.reorder (balls);
|
||||
assertTrue ("Result incorrect", check (balls, rCount));
|
||||
}
|
||||
|
||||
@Test (timeout=1000)
|
||||
public void testSpeed() {
|
||||
balls = new Balls.Color [1000000];
|
||||
rCount = 0;
|
||||
for (int i=0; i < balls.length; i++) {
|
||||
if (Math.random() < 0.5) {
|
||||
balls[i] = Balls.Color.red;
|
||||
rCount++;
|
||||
} else {
|
||||
balls[i] = Balls.Color.green;
|
||||
}
|
||||
}
|
||||
long t0 = System.currentTimeMillis();
|
||||
Balls.reorder (balls);
|
||||
long t1 = System.currentTimeMillis();
|
||||
int delta = (int)(t1-t0);
|
||||
assertTrue ("Result incorrect", check (balls, rCount));
|
||||
assertTrue ("Too slow: "+ delta, delta < threshold);
|
||||
System.out.println ("Time spent: " + delta + " ms");
|
||||
}
|
||||
|
||||
@Test (expected=RuntimeException.class)
|
||||
public void testNullArray() {
|
||||
Balls.reorder (null);
|
||||
}
|
||||
}
|
||||
|
||||
BIN
test/hamcrest-core-1.3.jar
Normal file
BIN
test/hamcrest-core-1.3.jar
Normal file
Binary file not shown.
BIN
test/junit-4.12.jar
Normal file
BIN
test/junit-4.12.jar
Normal file
Binary file not shown.
Reference in New Issue
Block a user