use crate::generate::generators;
use crate::OpSpec;
use serde::{Deserialize, Serialize};
use std::collections::HashSet;
use std::fs;
use std::io;
use std::path::Path;
use super::util::*;
fn random_input_for_signature(rng: &mut XorShift64, signature: &crate::spec::types::OpSignature) -> Vec<u8> {
use crate::spec::types::DataType;
let mut bytes = Vec::new();
for ty in &signature.inputs {
match ty {
DataType::U32 => bytes.extend_from_slice(&rng.next_u32().to_le_bytes()),
DataType::I32 => bytes.extend_from_slice(&(rng.next_u32() as i32).to_le_bytes()),
DataType::U64 => bytes.extend_from_slice(&rng.next_u64().to_le_bytes()),
DataType::Vec2U32 => {
bytes.extend_from_slice(&rng.next_u32().to_le_bytes());
bytes.extend_from_slice(&rng.next_u32().to_le_bytes());
}
DataType::Vec4U32 => {
for _ in 0..4 {
bytes.extend_from_slice(&rng.next_u32().to_le_bytes());
}
}
DataType::Bytes | DataType::Array { .. } => {
let len = (rng.next_u32() as usize) % 4097;
for _ in 0..len {
bytes.push((rng.next_u32() & 0xFF) as u8);
}
}
_ => {
let len = (rng.next_u32() as usize) % 64;
for _ in 0..len {
bytes.push((rng.next_u32() & 0xFF) as u8);
}
}
}
}
bytes
}