summaryrefslogtreecommitdiff
path: root/test/files/presentation/random
diff options
context:
space:
mode:
authorMicro Dotta <mirco.dotta@gmail.com>2011-08-17 13:32:25 +0000
committerMicro Dotta <mirco.dotta@gmail.com>2011-08-17 13:32:25 +0000
commit6ba1b9f3c974351e826485ca9c41df732c6de15a (patch)
tree25c08330ac9c176353cc98f6a3f6cbd0c541d07d /test/files/presentation/random
parent044099d4f1677425719ea8cad8c946dab8b5c2d9 (diff)
downloadscala-6ba1b9f3c974351e826485ca9c41df732c6de15a.tar.gz
scala-6ba1b9f3c974351e826485ca9c41df732c6de15a.tar.bz2
scala-6ba1b9f3c974351e826485ca9c41df732c6de15a.zip
Major rewrite of the testing infrastructure for...
Major rewrite of the testing infrastructure for the presentation compiler. Added several new tests that will be part of the nightly build. Once the move to SBT is completed I will look into how to extract the test infrastructure (as it should really not be living in the compiler codebase). Review by dragos
Diffstat (limited to 'test/files/presentation/random')
-rw-r--r--test/files/presentation/random/Runner.scala3
-rw-r--r--test/files/presentation/random/src/Random.scala106
2 files changed, 109 insertions, 0 deletions
diff --git a/test/files/presentation/random/Runner.scala b/test/files/presentation/random/Runner.scala
new file mode 100644
index 0000000000..1c03e3d5ba
--- /dev/null
+++ b/test/files/presentation/random/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest
diff --git a/test/files/presentation/random/src/Random.scala b/test/files/presentation/random/src/Random.scala
new file mode 100644
index 0000000000..af76a28f47
--- /dev/null
+++ b/test/files/presentation/random/src/Random.scala
@@ -0,0 +1,106 @@
+package examples
+
+import java.io._
+import java.net.{InetAddress,ServerSocket,Socket,SocketException}
+import java.util.Random
+
+/**
+ * Simple client/server application using Java sockets.
+ *
+ * The server simply generates random integer values and
+ * the clients provide a filter function to the server
+ * to get only values they interested in (eg. even or
+ * odd values, and so on).
+ */
+object randomclient {
+
+ def main(args: Array[String]) {
+ val filter/*?*/ = try {
+ Integer.parseInt(args(0)/*?*/) match {
+ case 1 => x: Int => x % 2 != 0
+ case 2 => x: Int => x % 2 == 0
+ case _ => x: Int => x != 0
+ }
+ }
+ catch {
+ case _/*?*/ => x: Int => x < 100
+ }
+
+ try {
+ val ia = InetAddress.getByName("localhost")
+ val socket = new Socket(ia, 9999)
+ val out = new ObjectOutputStream(
+ new DataOutputStream(socket.getOutputStream()))
+ val in = new DataInputStream(socket.getInputStream())
+
+ out.writeObject(filter)
+ out.flush()
+
+ while (true) {
+ val x = in.readInt()
+ println("x = " + x)
+ }
+ out.close()
+ in.close()
+ socket.close()
+ }
+ catch {
+ case e: IOException =>
+ e.printStackTrace()
+ }
+ }
+
+}
+
+object randomserver {
+
+ def main(args: Array[String]): Unit = {
+ try {
+ val listener = new ServerSocket(9999);
+ while (true)
+ new ServerThread(listener.accept()).start();
+ listener.close()
+ }
+ catch {
+ case e: IOException =>
+ System.err.println("Could not listen on port: 9999.");
+ System.exit(-1)
+ }
+ }
+
+}
+
+case class ServerThread(socket: Socket) extends Thread("ServerThread") {
+
+ override def run(): Unit = {
+ val rand = new Random(System.currentTimeMillis());
+ try {
+ val out = new DataOutputStream(socket.getOutputStream());
+ val in = new ObjectInputStream(
+ new DataInputStream(socket.getInputStream()));
+
+ val filter = in.readObject().asInstanceOf[Int => Boolean];
+
+ while (true) {
+ var succeeded = false;
+ do {
+ val x = rand.nextInt(1000);
+ succeeded = filter(x);
+ if (succeeded) out.writeInt(x)
+ } while (! succeeded);
+ Thread.sleep(100)
+ }
+
+ out.close();
+ in.close();
+ socket.close()
+ }
+ catch {
+ case e: SocketException =>
+ () // avoid stack trace when stopping a client with Ctrl-C
+ case e: IOException =>
+ e.printStackTrace();
+ }
+ }
+
+} \ No newline at end of file