From f0d9c593505e8695f94cf6595e26874121168ad7 Mon Sep 17 00:00:00 2001 From: Berack96 Date: Wed, 12 Feb 2025 17:57:30 +0100 Subject: [PATCH] Implement toString method for Net class and add unit tests for its functionality --- .../java/net/berack/upo/valpre/sim/Net.java | 42 ++++++++++++++++++ .../upo/valpre/sim/TestInteractions.java | 43 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 src/test/java/net/berack/upo/valpre/sim/TestInteractions.java diff --git a/src/main/java/net/berack/upo/valpre/sim/Net.java b/src/main/java/net/berack/upo/valpre/sim/Net.java index 47d7317..e16bfe8 100644 --- a/src/main/java/net/berack/upo/valpre/sim/Net.java +++ b/src/main/java/net/berack/upo/valpre/sim/Net.java @@ -248,6 +248,48 @@ public final class Net implements Iterable { } } + @Override + public String toString() { + var builder = new StringBuilder(); + try { + for (var node : this.servers) { + var dist = node.service.getClass(); + + builder.append(node.name) + .append("[servers:") + .append(node.maxServers) + .append(", queue:") + .append(node.maxQueue) + .append(", spawn:") + .append(node.spawnArrivals) + .append(", ") + .append(dist.getSimpleName()) + .append("("); + + for (var param : dist.getFields()) + builder.append(param.get(node.service)).append(", "); + builder.delete(builder.length() - 2, builder.length()) + .append(")] -> "); + + for (var child : this.getChildren(this.indices.get(node))) { + var childNode = this.servers.get(child.index); + builder.append(childNode.name) + .append("(") + .append(child.weight) + .append("), "); + } + + builder.delete(builder.length() - 2, builder.length()) + .append("\n"); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return builder.toString(); + } + /** * A Static inner class used to represent the connection of a node */ diff --git a/src/test/java/net/berack/upo/valpre/sim/TestInteractions.java b/src/test/java/net/berack/upo/valpre/sim/TestInteractions.java new file mode 100644 index 0000000..df46f22 --- /dev/null +++ b/src/test/java/net/berack/upo/valpre/sim/TestInteractions.java @@ -0,0 +1,43 @@ +package net.berack.upo.valpre.sim; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import net.berack.upo.valpre.rand.Distribution; + +public class TestInteractions { + + @Test + public void netToString() { + var net = new Net(); + assertEquals("", net.toString()); + + net.addNode(new ServerNode.Builder("Source", new Distribution.Exponential(1)).build()); + assertEquals("Source[servers:1, queue:100, spawn:0, Exponential(1.0)] -\n", net.toString()); + + net.addNode(new ServerNode.Builder("Server", new Distribution.Normal(3.2, 0.6)).build()); + assertEquals("Source[servers:1, queue:100, spawn:0, Exponential(1.0)] -\n" + + "Server[servers:1, queue:100, spawn:0, Normal(3.2, 0.6)] -\n", net.toString()); + + net.addConnection(0, 1, 1.0); + assertEquals("Source[servers:1, queue:100, spawn:0, Exponential(1.0)] -> Server(1.0)\n" + + "Server[servers:1, queue:100, spawn:0, Normal(3.2, 0.6)] -\n", net.toString()); + + net.addNode(new ServerNode.Builder("Server2", new Distribution.Normal(4.1, 0.1)).build()); + assertEquals("Source[servers:1, queue:100, spawn:0, Exponential(1.0)] -> Server(1.0)\n" + + "Server[servers:1, queue:100, spawn:0, Normal(3.2, 0.6)] -\n" + + "Server2[servers:1, queue:100, spawn:0, Normal(4.1, 0.1)] -\n", net.toString()); + + net.addConnection(0, 2, 1.0); + net.normalizeWeights(); + assertEquals("Source[servers:1, queue:100, spawn:0, Exponential(1.0)] -> Server(0.5), Server2(0.5)\n" + + "Server[servers:1, queue:100, spawn:0, Normal(3.2, 0.6)] -\n" + + "Server2[servers:1, queue:100, spawn:0, Normal(4.1, 0.1)] -\n", net.toString()); + + net.addConnection(1, 2, 1.0); + assertEquals("Source[servers:1, queue:100, spawn:0, Exponential(1.0)] -> Server(0.5), Server2(0.5)\n" + + "Server[servers:1, queue:100, spawn:0, Normal(3.2, 0.6)] -> Server2(1.0)\n" + + "Server2[servers:1, queue:100, spawn:0, Normal(4.1, 0.1)] -\n", net.toString()); + } +}