This commit is contained in:
2024-08-14 16:56:14 -04:00
parent a41b5d4627
commit b3c8938807
2 changed files with 97 additions and 15 deletions

View File

@@ -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);