diff options
author | Micro Dotta <mirco.dotta@gmail.com> | 2011-08-17 13:32:25 +0000 |
---|---|---|
committer | Micro Dotta <mirco.dotta@gmail.com> | 2011-08-17 13:32:25 +0000 |
commit | 6ba1b9f3c974351e826485ca9c41df732c6de15a (patch) | |
tree | 25c08330ac9c176353cc98f6a3f6cbd0c541d07d /test/files/presentation/random | |
parent | 044099d4f1677425719ea8cad8c946dab8b5c2d9 (diff) | |
download | scala-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.scala | 3 | ||||
-rw-r--r-- | test/files/presentation/random/src/Random.scala | 106 |
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 |