--- /dev/null
+package example.symphony.test;\r
+\r
+import example.symphony.AdapterIterableNetwork;\r
+import example.symphony.SymphonyNetworkManager;\r
+import example.symphony.SymphonyProtocol;\r
+import peersim.config.Configuration;\r
+import peersim.core.Control;\r
+import peersim.core.Node;\r
+\r
+/**\r
+ *\r
+ * @author Andrea Esposito <and1989@gmail.com>\r
+ */\r
+public class NetworkEstimationTest implements Control {\r
+\r
+ private static final String PAR_NETMANAGER = "symphonynetworkmanager";\r
+ private static final String PAR_SYMPHONY = "symphony";\r
+ private final int symphonyID;\r
+ private final int networkManagerID;\r
+\r
+ public NetworkEstimationTest(String prefix) {\r
+\r
+ networkManagerID = Configuration.getPid(prefix + "." + PAR_NETMANAGER);\r
+ symphonyID = Configuration.getPid(prefix + "." + PAR_SYMPHONY);\r
+ }\r
+\r
+ public boolean execute() {\r
+\r
+ AdapterIterableNetwork it = new AdapterIterableNetwork();\r
+ int max = Integer.MIN_VALUE;\r
+ int min = Integer.MAX_VALUE;\r
+ int sum = 0;\r
+ int total = 0;\r
+ for (Node node : it) {\r
+ if (node.isUp() && ((SymphonyProtocol) node.getProtocol(symphonyID)).isBootstrapped()) {\r
+ SymphonyNetworkManager networkManager = (SymphonyNetworkManager) node.getProtocol(networkManagerID);\r
+ int n = networkManager.getN();\r
+ min = n < min ? n : min;\r
+ max = n > max ? n : max;\r
+ sum += n;\r
+ total++;\r
+ }\r
+ }\r
+\r
+ System.out.println("Real Dimension: " + (Math.log(total) / Math.log(2)));\r
+ System.out.println("Average Estimated Dimension: " + (total == 0 ? "No Node online" : (Math.log((sum / total)) / Math.log(2))));\r
+ System.out.println("MAX: " + Math.log(max) / Math.log(2));\r
+ System.out.println("MIN: " + Math.log(min) / Math.log(2));\r
+\r
+ return false;\r
+ }\r
+}\r