added first draft for lib-crates for test_random and test_random_derive (lighthouse-246)

This commit is contained in:
thojest 2019-02-22 12:16:11 +01:00
parent c040ed7b11
commit 5f3ba42b97
5 changed files with 79 additions and 0 deletions

View File

@ -15,6 +15,8 @@ members = [
"eth2/utils/ssz_derive",
"eth2/utils/swap_or_not_shuffle",
"eth2/utils/fisher_yates_shuffle",
"eth2/utils/test_random",
"eth2/utils/test_random_derive",
"beacon_node",
"beacon_node/db",
"beacon_node/beacon_chain",

View File

@ -0,0 +1,8 @@
[package]
name = "test_random"
version = "0.1.0"
authors = ["thojest <thojest@gmail.com>"]
edition = "2018"
[dependencies]
rand = "0.5.5"

View File

@ -0,0 +1,39 @@
use rand::RngCore;
pub trait TestRandom<T>
where
T: RngCore,
{
fn random_for_test(rng: &mut T) -> Self;
}
impl<T: RngCore> TestRandom<T> for u64 {
fn random_for_test(rng: &mut T) -> Self {
rng.next_u64()
}
}
impl<T: RngCore> TestRandom<T> for u32 {
fn random_for_test(rng: &mut T) -> Self {
rng.next_u32()
}
}
impl<T: RngCore> TestRandom<T> for usize {
fn random_for_test(rng: &mut T) -> Self {
rng.next_u32() as usize
}
}
impl<T: RngCore, U> TestRandom<T> for Vec<U>
where
U: TestRandom<T>,
{
fn random_for_test(rng: &mut T) -> Self {
vec![
<U>::random_for_test(rng),
<U>::random_for_test(rng),
<U>::random_for_test(rng),
]
}
}

View File

@ -0,0 +1,15 @@
[package]
name = "test_random_derive"
version = "0.1.0"
authors = ["thojest <thojest@gmail.com>"]
edition = "2018"
description = "Procedural derive macros for implementation of TestRandom trait"
[lib]
proc-macro = true
[dependencies]
syn = "0.15"
quote = "0.6"
test_random = {path = "../test_random"}

View File

@ -0,0 +1,15 @@
extern crate proc_macro;
use crate::proc_macro::TokenStream;
use quote::quote;
use syn;
use syn::DeriveInput;
#[proc_macro_derive(TestRandom)]
pub fn test_random_derive(input: TokenStream) -> TokenStream {
let ast = syn::parse(input).unwrap();
impl_test_random(&ast)
}
fn impl_test_random(ast: &DeriveInput) -> TokenStream {}