From b3c89388079e25c1129e635d88746d7ba4d0f21e Mon Sep 17 00:00:00 2001 From: Teppy Date: Wed, 14 Aug 2024 16:56:14 -0400 Subject: [PATCH] changes --- royalty2.log | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 58 ++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 97 insertions(+), 15 deletions(-) create mode 100644 royalty2.log diff --git a/royalty2.log b/royalty2.log new file mode 100644 index 0000000..19436f5 --- /dev/null +++ b/royalty2.log @@ -0,0 +1,54 @@ +NOP Error: adduser +AT Teppy +AT Luni +AT Hamza +AA USD +AA BTC +SR 0 19999999 0 0 0 +AF 2 1 300000000 +AF 1 0 186A000000000 +OR 2 1 100000000 0 C35000000000 +OR 2 1 100000000 0 EA6000000000 +OR 1 0 1117000000000 1 80000000 +OR 1 1 6EFB69849 0 15B1A8C689 +OR 2 0 18E34B32E1 1 243BBBBA10 +OR 1 0 1F0979696D 1 11E5CB8C5F +AF 2 1 215364483C +AF 3 1 891AFC8C0 +AF 3 1 F04D7CABB +OR 3 1 1B7058942F 1 12573225F2 +AF 1 0 25DA2D6060 +AF 3 0 151F8E8A18 +AF 2 1 1BDE6E5DDA +OR 3 0 59A71E33C 0 10C9FD83D2 +AF 3 1 1F88B59AA8 +AF 3 1 1B6E614618 +OR 3 1 24F94C98D5 1 24F66B030C +OR 2 1 19E28BC7F0 1 5968F1DAD +AF 3 1 21C75333CF +AF 2 1 CFCD48BE0 +OR 2 0 240430F1A5 0 25E13E81E1 +AF 3 0 4E5E96272 +OR 2 0 2299F8EFBF 1 1D39E5B911 +AF 1 1 42C7269F7 +AF 1 1 12F8E79E5F +AF 3 0 16425358DC +AF 1 1 F96CD972D +OR 2 0 82B856AA5 1 34A36393D +OR 3 0 C75D24EBE 1 C6041BD97 +OR 3 1 1DFC18EC34 1 8B9B41EB1 +OR 3 0 19786E00B5 1 1A16FDCAD3 +OR 1 0 1C72D46C4A 1 1DB942B756 +OR 2 1 228C580C87 0 27F3A63C53 +OR 1 1 1778DBCA22 1 1C4D5277D3 +OR 2 1 F28C33FFB 1 323E37A2D +OR 2 1 1C2587E46F 1 22E2E04B31 +OR 1 0 C48222DF7 0 A75B450D4 +AF 3 0 496C0DAD5 +AF 1 1 85260D486 +AF 2 1 364A56B55 +AF 1 0 28FB02AF7 +AF 2 0 210D21849F +AF 1 0 96BDA2649 +AF 3 1 2641D775EC +OR 2 1 1B7225879A 0 20E963C8A8 diff --git a/src/main.rs b/src/main.rs index 29804d5..916f46a 100644 --- a/src/main.rs +++ b/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, order_finder: HashMap, // 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) { } 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);