From a41b5d46277baa62ae5f4784b11043bea5d45f69 Mon Sep 17 00:00:00 2001 From: Teppy Date: Sat, 10 Aug 2024 16:52:07 -0400 Subject: [PATCH] changes --- src/main.rs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index d9d7a47..29804d5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -200,14 +200,26 @@ impl RoyaltyTree { self.tree[index].acc } fn add_royalty(&mut self, amount: FiNum) { - if self.next_entry==0 { self.spare_change+=amount } + if self.next_entry==0 || FiNum::is_zero(self.tree[self.forefather()].weight) { self.spare_change+=amount } else { let ff=self.forefather(); if self.weight_here_below(ff).is_zero() { self.spare_change+=amount } else { self.tree[ff].lazy+=amount }; } } - fn remove_order_id(&mut self, id: usize) { + fn remove_order_id(&mut self, id: usize) { // And zero out in the tree + let pos=*self.order_finder.get(&id).unwrap(); self.order_finder.remove(&id); + let weight=self.tree[pos].weight; + self.sub_weight(pos,weight); + } + fn sub_weight(&mut self, index: usize, weight: FiNum) { + self.get_royalty(index); + let redist=self.tree[index].acc; + self.tree[index].acc=FiNum::zero(); + let mut index=index; + let ff=self.forefather(); + while index!=ff { self.tree[index].weight-=weight; index=wt_parent(index); } + self.add_royalty(redist); } fn set_location(&mut self, id: usize, index: usize) { self.order_finder.insert(id,index); @@ -610,6 +622,23 @@ 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 exercise(&mut self) { let mut rng: StdRng=StdRng::seed_from_u64(13u64); let teppy=self.register_trader("Teppy");