all ints were supposed to be signed

This commit is contained in:
Caleb Webber 2024-05-14 23:08:04 -04:00
parent f10de4e655
commit cb9a570ad1

View file

@ -2,14 +2,14 @@ use std::{io::{Read, Write}, net::TcpListener};
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]
struct InsertData { struct InsertData {
timestamp: u32, // seconds since 00:00, 1st Jan 1970. timestamp: i32, // seconds since 00:00, 1st Jan 1970.
price: i32, // price in pennies price: i32, // price in pennies
} }
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]
struct QueryData { struct QueryData {
mintime: u32, mintime: i32,
maxtime: u32, maxtime: i32,
} }
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]
@ -39,12 +39,12 @@ impl Message {
match t { match t {
b'I' => Ok(Message::Insert(InsertData { b'I' => Ok(Message::Insert(InsertData {
timestamp: u32::from_be_bytes(u), timestamp: i32::from_be_bytes(u),
price: i32::from_be_bytes(v), price: i32::from_be_bytes(v),
})), })),
b'Q' => Ok(Message::Query(QueryData { b'Q' => Ok(Message::Query(QueryData {
mintime: u32::from_be_bytes(u), mintime: i32::from_be_bytes(u),
maxtime: u32::from_be_bytes(v), maxtime: i32::from_be_bytes(v),
})), })),
_ => Err(ParseError::UnknownType), _ => Err(ParseError::UnknownType),
} }
@ -52,15 +52,20 @@ impl Message {
} }
fn get_mean_price(insertions: &Vec<InsertData>, query: &QueryData) -> i32 { fn get_mean_price(insertions: &Vec<InsertData>, query: &QueryData) -> i32 {
let prices: Vec<i32> = insertions println!("querying for mintime: {}, maxtime: {}", query.mintime, query.maxtime);
let prices: Vec<isize> = insertions
.iter() .iter()
.filter(|i| i.timestamp >= query.mintime && i.timestamp <= query.maxtime) .filter(|i| i.timestamp >= query.mintime && i.timestamp <= query.maxtime)
.map(|i| i.price) .map(|i| i.price as isize)
.collect(); .collect();
let len = prices.len() as isize;
let sum = prices.iter().sum::<isize>();
let avg = if prices.len() > 0 { sum / len } else { 0 };
println!("query: sum: {}, len: {}, avg: {}", sum, len, avg);
// safe? // safe?
if prices.len() > 0 { prices.iter().sum::<i32>() / prices.len() as i32 } else { 0 } avg as i32
} }
const PORT: usize = 10001; const PORT: usize = 10001;
@ -81,7 +86,10 @@ fn main() -> std::io::Result<()> {
inserts.push(i); inserts.push(i);
}, },
Ok(Message::Query(q)) => { Ok(Message::Query(q)) => {
let _ = stream.write(&i32::to_be_bytes(get_mean_price(&inserts, &q))); let p = get_mean_price(&inserts, &q);
let p_bytes = i32::to_be_bytes(p);
println!("sending bytes: {:?}", p_bytes);
let _ = stream.write(&p_bytes);
}, },
Err(e) => { Err(e) => {
panic!("{:?}", e); panic!("{:?}", e);