changes
This commit is contained in:
58
src/main.rs
58
src/main.rs
@@ -176,6 +176,8 @@ impl RoyaltyTree {
|
||||
self.tree[index].lazy=FiNum::zero();
|
||||
} else {
|
||||
let lazy=self.tree[index].lazy;
|
||||
println!("Index is {}",index);
|
||||
self.raw_dump();
|
||||
let d1=if lazy>0.into() { lazy*self.weight_here(index)/self.weight_here_below(index) } else { FiNum::zero() };
|
||||
let d02=lazy-d1;
|
||||
let index_left =wt_left (index).unwrap();
|
||||
@@ -254,6 +256,11 @@ impl RoyaltyTree {
|
||||
println!("Index {} Weight {} Lazy {} Acc {} Royalty {}",index,self.tree[index].weight,self.tree[index].lazy,self.tree[index].acc,roy);
|
||||
}
|
||||
}
|
||||
fn raw_dump(&mut self) {
|
||||
for index in 0..self.tree.len() {
|
||||
println!("Index {}: Weight {} Lazy {} Acc {} Order_ID {}",index,self.tree[index].weight,self.tree[index].lazy,self.tree[index].acc,self.tree[index].order_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -286,6 +293,7 @@ struct Market {
|
||||
royalty_rate: HashMap<usize,FiNum>,
|
||||
order_finder: HashMap<usize,(usize,usize)>, // To find an order, look in Orders.get(usize,usize) at position usize
|
||||
next_order_id: usize,
|
||||
rng: StdRng,
|
||||
}
|
||||
|
||||
impl Market {
|
||||
@@ -301,6 +309,7 @@ impl Market {
|
||||
royalty_rate: HashMap::new(),
|
||||
order_finder: HashMap::new(),
|
||||
next_order_id: 1,
|
||||
rng: StdRng::seed_from_u64(1u64),
|
||||
};
|
||||
rval.register_trader("*HOUSE*");
|
||||
rval
|
||||
@@ -622,21 +631,20 @@ impl OrderQueue {
|
||||
}
|
||||
|
||||
impl Market {
|
||||
fn random_orders(&mut self, seed: u64, count: u64) {
|
||||
let mut rng: StdRng=StdRng::seed_from_u64(13u64);
|
||||
for _ in 1..count {
|
||||
let cmd=match rng.gen_range(1..2) {
|
||||
1 => Command::AddFunds { user_id: rng.gen_range(1..self.traders.len()-1),
|
||||
asset_id: rng.gen_range(0..self.assets.len()-1),
|
||||
amt: FiNum::new(rng.gen_range(1<<32..20<<32)), },
|
||||
2 => Command::Order { user_id: rng.gen_range(1..self.traders.len()-1),
|
||||
sell_type: rng.gen_range(0..self.assets.len()-1),
|
||||
sell_qty: FiNum::new(rng.gen_range(1<<32..20<<32)),
|
||||
buy_type: rng.gen_range(0..self.assets.len()-1),
|
||||
buy_qty: FiNum::new(rng.gen_range(1<<32..20<<32)), },
|
||||
_ => Command::Error("This can never happen".to_string()),
|
||||
};
|
||||
self.execute(&cmd);
|
||||
fn seed_random(&mut self, seed: u64) {
|
||||
self.rng=StdRng::seed_from_u64(seed);
|
||||
}
|
||||
fn random_command(&mut self) -> Command {
|
||||
match self.rng.gen_range(1..3) {
|
||||
1 => Command::AddFunds { user_id: self.rng.gen_range(1..self.traders.len()),
|
||||
asset_id: self.rng.gen_range(0..self.assets.len()),
|
||||
amt: FiNum::new(self.rng.gen_range(1<<32..20<<32+1)), },
|
||||
2 => Command::Order { user_id: self.rng.gen_range(1..self.traders.len()),
|
||||
sell_type: self.rng.gen_range(0..self.assets.len()),
|
||||
sell_qty: FiNum::new(self.rng.gen_range(1<<32..20<<32+1)),
|
||||
buy_type: self.rng.gen_range(0..self.assets.len()),
|
||||
buy_qty: FiNum::new(self.rng.gen_range(1<<32..20<<32+1)), },
|
||||
_ => Command::Error("This can never happen".to_string()),
|
||||
}
|
||||
}
|
||||
fn exercise(&mut self) {
|
||||
@@ -1017,6 +1025,26 @@ fn interactive(m: &mut Market, mut out: Option<File>) {
|
||||
} else { println!("Could not find trader {}",username); }
|
||||
Command::None
|
||||
},
|
||||
["seedrandom", seed] => {
|
||||
let seed=seed.parse().unwrap();
|
||||
m.seed_random(seed);
|
||||
println!("Seeded RNG with {}",seed);
|
||||
Command::None
|
||||
}
|
||||
["randomcommands", qty] => {
|
||||
let qty:u32=qty.parse().unwrap();
|
||||
for i in 0..qty {
|
||||
let cmd=m.random_command();
|
||||
println!("RandomCommand #{}: {}",1+i,cmd.serialize());
|
||||
if let Some(ref mut f)=out {
|
||||
let ser=cmd.serialize();
|
||||
if let Err(e)=writeln!(f,"{}",ser) { eprintln!("An error occurred while writing {}",e); }
|
||||
} else { println!("{}",cmd.serialize()); }
|
||||
let res=m.execute(&cmd);
|
||||
println!("Result: {}",res.describe());
|
||||
}
|
||||
Command::None
|
||||
},
|
||||
["quit"] => { return },
|
||||
_ => {
|
||||
let cmd=tokens_to_command(m,trader,tokens,&input);
|
||||
|
||||
Reference in New Issue
Block a user