package wc;

import java.io.FileReader;
import java.io.IOException;

/**
 * Testet die Klasse CountedReader
 * 
 * @author  Ralf Kunze (rkunze@uos.de), Institut fuer Informatik, Universitaet Osnabrueck
 * @date 30.04.2007
 */
public class Test {

	public static void main(String args[]) {
		long time = 0;
		
		try {
			
				// CountedReader mit dem entsprechenden Dateinamen anlegen
			CountedReader in = new CountedReader(new FileReader(args[0]));

				// Alle Zeichen auslesen. Die Zeichen werden in diesem
				// Beispiel nicht weiter verarbeitet. Es waere aber moeglich.
				// Zusaetzlich wird die benoetigte Zeit ermittelt
			
			time = System.currentTimeMillis();
			
			while (in.read() != -1);
			
			System.out.println("Byteweises Lesen dauerte " + (System.currentTimeMillis()-time) + " Millisekunden");
			
				// Ausgabe der Zaehlung
			System.out.println(in.getWordCounter() + " words, " + in.getLineCounter()
					+ " lines, " + in.getCharCounter() + " characters");
			
				// Zur Sicherheit ein Flush()
				// Ist nicht zwingend noetig.
			System.out.flush();
		} catch (ArrayIndexOutOfBoundsException e) {
			System.err.println("Usage: java wc.Test input-file");
			System.exit(1);
		} catch (IOException e) {
			System.err.println(e);
			System.exit(1);
		}
		
			// Erneutes auslesen, diesmal blockweise
		try {
			CountedReader in = new CountedReader(new FileReader(args[0]));

			char[] buf = new char[1024];
			
			time = System.currentTimeMillis();
			
			while (in.read(buf) != -1);
			
			System.out.println("Blockweises Lesen dauerte " + (System.currentTimeMillis()-time) + " Millisekunden");
			
			System.out.println(in.getWordCounter() + " words, " + in.getLineCounter()
					+ " lines, " + in.getCharCounter() + " characters");
			
			System.out.flush(); // flush all
		} catch (ArrayIndexOutOfBoundsException e) {
			System.err.println("Usage: java wc.Test input-file");
			System.exit(1);
		} catch (IOException e) {
			System.err.println(e);
			System.exit(1);
		}
	}
}
