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

54
royalty2.log Normal file
View File

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

View File

@@ -176,6 +176,8 @@ impl RoyaltyTree {
self.tree[index].lazy=FiNum::zero(); self.tree[index].lazy=FiNum::zero();
} else { } else {
let lazy=self.tree[index].lazy; 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 d1=if lazy>0.into() { lazy*self.weight_here(index)/self.weight_here_below(index) } else { FiNum::zero() };
let d02=lazy-d1; let d02=lazy-d1;
let index_left =wt_left (index).unwrap(); 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); 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>, royalty_rate: HashMap<usize,FiNum>,
order_finder: HashMap<usize,(usize,usize)>, // To find an order, look in Orders.get(usize,usize) at position usize order_finder: HashMap<usize,(usize,usize)>, // To find an order, look in Orders.get(usize,usize) at position usize
next_order_id: usize, next_order_id: usize,
rng: StdRng,
} }
impl Market { impl Market {
@@ -301,6 +309,7 @@ impl Market {
royalty_rate: HashMap::new(), royalty_rate: HashMap::new(),
order_finder: HashMap::new(), order_finder: HashMap::new(),
next_order_id: 1, next_order_id: 1,
rng: StdRng::seed_from_u64(1u64),
}; };
rval.register_trader("*HOUSE*"); rval.register_trader("*HOUSE*");
rval rval
@@ -622,21 +631,20 @@ impl OrderQueue {
} }
impl Market { impl Market {
fn random_orders(&mut self, seed: u64, count: u64) { fn seed_random(&mut self, seed: u64) {
let mut rng: StdRng=StdRng::seed_from_u64(13u64); self.rng=StdRng::seed_from_u64(seed);
for _ in 1..count { }
let cmd=match rng.gen_range(1..2) { fn random_command(&mut self) -> Command {
1 => Command::AddFunds { user_id: rng.gen_range(1..self.traders.len()-1), match self.rng.gen_range(1..3) {
asset_id: rng.gen_range(0..self.assets.len()-1), 1 => Command::AddFunds { user_id: self.rng.gen_range(1..self.traders.len()),
amt: FiNum::new(rng.gen_range(1<<32..20<<32)), }, asset_id: self.rng.gen_range(0..self.assets.len()),
2 => Command::Order { user_id: rng.gen_range(1..self.traders.len()-1), amt: FiNum::new(self.rng.gen_range(1<<32..20<<32+1)), },
sell_type: rng.gen_range(0..self.assets.len()-1), 2 => Command::Order { user_id: self.rng.gen_range(1..self.traders.len()),
sell_qty: FiNum::new(rng.gen_range(1<<32..20<<32)), sell_type: self.rng.gen_range(0..self.assets.len()),
buy_type: rng.gen_range(0..self.assets.len()-1), sell_qty: FiNum::new(self.rng.gen_range(1<<32..20<<32+1)),
buy_qty: FiNum::new(rng.gen_range(1<<32..20<<32)), }, 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()), _ => Command::Error("This can never happen".to_string()),
};
self.execute(&cmd);
} }
} }
fn exercise(&mut self) { fn exercise(&mut self) {
@@ -1017,6 +1025,26 @@ fn interactive(m: &mut Market, mut out: Option<File>) {
} else { println!("Could not find trader {}",username); } } else { println!("Could not find trader {}",username); }
Command::None 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 }, ["quit"] => { return },
_ => { _ => {
let cmd=tokens_to_command(m,trader,tokens,&input); let cmd=tokens_to_command(m,trader,tokens,&input);