#[test]
fn debut_std_test() {
static N: u16 = 1000;
pub fn debut ()-> std::sync::Arc<std::time::SystemTime> {
static LAST: std::sync::Mutex<std::time::SystemTime> = std::sync::Mutex::new(std::time::SystemTime::UNIX_EPOCH);
let mut last_time = LAST.lock().unwrap();
let mut next_time = std::time::SystemTime::now();
while !(*last_time < next_time) {
if *last_time == next_time {
next_time += std::time::Duration::new(0, 1);
} else {
next_time = std::time::SystemTime::now();
}
}
*last_time = next_time.clone();
std::sync::Arc::new(next_time)
}
let hn = vec![
std::thread::spawn(
move || { (0..N).into_iter().map(|x|(1,x,debut()) ).collect::<Vec<_>>() }
),
std::thread::spawn(
move || { (0..N).into_iter().map(|x|(2,x,debut()) ).collect::<Vec<_>>() }
),
std::thread::spawn(
move || { (0..N).into_iter().map(|x|(3,x,debut()) ).collect::<Vec<_>>() }
),
std::thread::spawn(
move || { (0..N).into_iter().map(|x|(4,x,debut()) ).collect::<Vec<_>>() }
),
std::thread::spawn(
move || { (0..N).into_iter().map(|x|(5,x,debut()) ).collect::<Vec<_>>() }
),
];
let result = hn.into_iter().map(|x| x.join()).collect::<Vec<_>>();
let mut res = result.into_iter().map(|x| x.unwrap()).flat_map(|x|x).collect::<Vec<_>>();
res.sort_by(|a,b| a.2.partial_cmp(&b.2).unwrap() );
let mut faults = 0;
while let Some(item) = res.pop(){
if res.iter().any(|x| x.2 == item.2 ) {
faults += 1;
}
}
assert_eq!(faults,0);
}
#[test]
fn debut_async_tokio_test() {
static N: u16 = 100;
pub async fn debut ()-> std::sync::Arc<std::time::SystemTime> {
static LAST: std::sync::Mutex<std::time::SystemTime> = std::sync::Mutex::new(std::time::SystemTime::UNIX_EPOCH);
let mut last_time = LAST.lock().unwrap();
let mut next_time = std::time::SystemTime::now();
while !(*last_time < next_time) {
if *last_time == next_time {
next_time += std::time::Duration::new(0, 1);
} else {
next_time = std::time::SystemTime::now();
}
}
*last_time = next_time.clone();
std::sync::Arc::new(next_time)
}
tokio::runtime::Runtime::new()
.unwrap()
.block_on(
async {
let mut handles = Vec::new();
for i in 0..100 {
let handle = tokio::spawn(async move {
let mut loc = Vec::new();
for x in 0..N{
loc.push( (i,x,debut().await) )
}
loc
});
handles.push(handle);
}
let mut hns = Vec::new();
for hn in handles {
hns.push( hn.await.unwrap());
}
let mut res = hns.into_iter().flat_map(|x|x).collect::<Vec<_>>();
res.sort_by(|a,b| a.2.partial_cmp(&b.2).unwrap() );
let mut faults = 0;
while let Some(item) = res.pop(){
if res.iter().any(|x| x.2 == item.2 ) {
faults += 1;
}
}
assert_eq!(faults,0);
});
}
#[test]
fn debut_std_tokio_test() {
static N: u16 = 100;
pub fn debut ()-> std::sync::Arc<std::time::SystemTime> {
static LAST: std::sync::Mutex<std::time::SystemTime> = std::sync::Mutex::new(std::time::SystemTime::UNIX_EPOCH);
let mut last_time = LAST.lock().unwrap();
let mut next_time = std::time::SystemTime::now();
while !(*last_time < next_time) {
if *last_time == next_time {
next_time += std::time::Duration::new(0, 1);
} else {
next_time = std::time::SystemTime::now();
}
}
*last_time = next_time.clone();
std::sync::Arc::new(next_time)
}
tokio::runtime::Runtime::new()
.unwrap()
.block_on(
async {
let mut handles = Vec::new();
for i in 0..100 {
let handle = tokio::spawn(async move {
let mut loc = Vec::new();
for x in 0..N{
loc.push( (i,x,debut()) )
}
loc
});
handles.push(handle);
}
let mut hns = Vec::new();
for hn in handles {
hns.push( hn.await.unwrap());
}
let mut res = hns.into_iter().flat_map(|x|x).collect::<Vec<_>>();
res.sort_by(|a,b| a.2.partial_cmp(&b.2).unwrap() );
let mut faults = 0;
while let Some(item) = res.pop(){
if res.iter().any(|x| x.2 == item.2 ) {
faults += 1;
}
}
assert_eq!(faults,0);
});
}