()
| 103 | } |
| 104 | |
| 105 | fn main() -> eyre::Result<()> { |
| 106 | color_eyre::install()?; |
| 107 | let args = CmdlineOptions::parse(); |
| 108 | |
| 109 | let filter = tracing_subscriber::EnvFilter::builder() |
| 110 | .with_default_directive(args.log_level.into()) |
| 111 | .from_env_lossy(); |
| 112 | tracing_subscriber::fmt() |
| 113 | .with_env_filter(filter) |
| 114 | .with_ansi(true) |
| 115 | .with_writer(std::io::stderr) |
| 116 | .init(); |
| 117 | |
| 118 | let seed = generate_random_seed_if_not_specified(args.seed); |
| 119 | let mut rng = StdRng::seed_from_u64(seed); |
| 120 | |
| 121 | let num_points = if args.random_number { |
| 122 | // close enough to normal with integers |
| 123 | let n = args.points * 2; // changes mean |
| 124 | let p = 0.5; // changes skew |
| 125 | let dist = Binomial::new(n, p)?; |
| 126 | dist.sample(&mut rng) |
| 127 | } else { |
| 128 | args.points |
| 129 | }; |
| 130 | |
| 131 | tracing::info!("Generating {num_points} points with seed {seed}"); |
| 132 | |
| 133 | let points = generate(num_points as usize, args.domain, &mut rng); |
| 134 | let mut writer = get_output_writer(&args.output)?; |
| 135 | for point in points { |
| 136 | writeln!( |
| 137 | writer, |
| 138 | "POINT ({} {})", |
| 139 | point.x * args.scale, |
| 140 | point.y * args.scale |
| 141 | )?; |
| 142 | } |
| 143 | Ok(()) |
| 144 | } |
nothing calls this directly
no test coverage detected