Skip to content

Commit da3b510

Browse files
committed
Split binary and lib
1 parent 96a3f19 commit da3b510

File tree

11 files changed

+119
-91
lines changed

11 files changed

+119
-91
lines changed

Cargo.lock

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
1-
[package]
2-
name = "roll-rs"
3-
version = "0.1.0"
4-
authors = ["Victor Roest <victor@xirion.net>"]
5-
edition = "2018"
1+
[workspace]
62

7-
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8-
9-
[dependencies]
10-
rand_core = {version="0.5", features=["getrandom"] }
11-
12-
[dev-dependencies]
13-
bnf = "0.3"
3+
members = [
4+
"roll",
5+
"roll-lib"
6+
]

roll-lib/Cargo.toml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[package]
2+
name = "roll-lib"
3+
version = "0.1.0"
4+
authors = ["Victor Roest <victor@xirion.net>"]
5+
edition = "2018"
6+
7+
[lib]
8+
crate-type = ["cdylib", "rlib"]
9+
10+
[dependencies]
11+
rand_core = {version="0.5", features=["getrandom"] }
12+
13+
[dev-dependencies]
14+
bnf = "0.3"
File renamed without changes.
File renamed without changes.

roll-lib/src/lib.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
mod filtermodifier;
2+
mod interpreter;
3+
mod options;
4+
mod parser;
5+
mod roll;
6+
7+
pub use crate::parser::*;
8+
pub use crate::roll::*;
9+
pub use rand_core;
10+
11+
#[cfg(test)]
12+
mod test {
13+
use crate::parser::Parser;
14+
15+
fn grammar() -> bnf::Grammar {
16+
include_str!("../../grammar.bnf").parse().unwrap()
17+
}
18+
19+
fn generate_sentence() -> String {
20+
loop {
21+
let res = grammar().generate();
22+
match res {
23+
Ok(i) => break i,
24+
Err(bnf::Error::RecursionLimit(_)) => continue,
25+
_ => panic!("aaaaa")
26+
}
27+
}
28+
}
29+
30+
#[test]
31+
fn fuzz() {
32+
for _ in 0..500 {
33+
let sentence = generate_sentence();
34+
if let Err(e) = Parser::new(&sentence).advanced().parse() {
35+
println!("failed with sentence \"{}\" and error: {:?}", sentence, e);
36+
break;
37+
}
38+
}
39+
}
40+
}
File renamed without changes.
File renamed without changes.

src/roll.rs renamed to roll-lib/src/roll.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,30 @@ pub fn roll_die(
6060
}
6161
}
6262

63+
const DIR: &[&str] = &[
64+
"North",
65+
"North East",
66+
"East",
67+
"South East",
68+
"South",
69+
"South West",
70+
"West",
71+
"North West",
72+
"Stay",
73+
];
74+
75+
pub fn roll_direction(rng: impl RngCore) -> String {
76+
let value = roll_die(
77+
1,
78+
NonZeroU64::new(DIR.len() as u64).unwrap(),
79+
FilterModifier::None,
80+
rng,
81+
);
82+
return DIR[value.total as usize - 1].to_string()
83+
}
84+
85+
86+
6387
#[cfg(test)]
6488
mod tests {
6589
use super::*;

roll/Cargo.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "roll"
3+
version = "0.1.0"
4+
authors = ["Victor Roest <victor@xirion.net>"]
5+
edition = "2018"
6+
7+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8+
9+
[dependencies]
10+
roll-lib = { path = "../roll-lib" }

0 commit comments

Comments
 (0)