def test_multicore_simulation_output(self): '''Verify the multi-core run produces an output file''' output_file = os.path.join(tempfile.gettempdir(), 'multi_core.csv') sensornetwork.run_simulation(num_simulations=2, num_cycles=self.mean_time_to_failure*3, part_configurations=self.part_configs, start_time=0, fname=output_file) self.assertTrue(os.path.getsize(output_file) > 0) os.remove(output_file)
def main(): '''Main entry point of the program''' parser = argparse.ArgumentParser(description='Monte Carlo ALT simulation') parser.add_argument('-n', action="store", type=int, default=1000, dest="num_sims", help="Specify number of simulations to run (default 1000)") parser.add_argument('-m', action="store_true", default=False, dest='multicore', help='Use multiprocess mode (defaults to single process)') parser.add_argument('-o', action="store", type=str, default="results.csv", dest='output_file', help="Store output in specified file") parser.add_argument('-c', action="store_true", default=False, dest='check_results', help='Analyze the results and report if the network appears valid') parser.add_argument('-t', action='store', type=float, default=0.1, dest='collision_threshold', help='Specifies tolerance for calling a collision (defaults to 0.1)') args = parser.parse_args() part_configurations = build_part_configs() number_of_cycles = 3*part_configurations[0].get('mttf') if not args.multicore: print("Running single process: {0} simulations, output saved to '{1}'\n".format( args.num_sims, args.output_file)) sensornetwork.run_simulation(num_simulations=args.num_sims, num_cycles=number_of_cycles, part_configurations=part_configurations, start_time=0, fname=args.output_file) else: print("Running multiple processes: {0} simulations, output saved to '{1}'\n".format( args.num_sims, args.output_file)) sensornetwork.multirun_simulation(num_simulations=args.num_sims, num_cycles=number_of_cycles, part_configurations=part_configurations, start_time=0, fname=args.output_file) if args.check_results: print("Analyzing results") analyzer = analysis.Analysis(args.output_file, threshold=args.collision_threshold) obvious_collisions = analyzer.check_obvious_collisions() num_collisions = len(obvious_collisions) if num_collisions == 0: print("No obvious collisions found.") else: print("{0} obvious collisions found.".format(num_collisions))