need to test extractstate
This commit is contained in:
parent
d697e14173
commit
38f94e4e8e
@ -1,4 +1,5 @@
|
||||
use crate::utils::varfunc::VarFunc;
|
||||
use crate::utils::extractstate::Extract;
|
||||
use quote::quote;
|
||||
use syn::parse_macro_input;
|
||||
|
||||
@ -10,6 +11,12 @@ pub fn run_func(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
|
||||
quote! { #f }.into()
|
||||
}
|
||||
|
||||
#[proc_macro]
|
||||
pub fn run_extract(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
|
||||
let f = parse_macro_input!(input as Extract);
|
||||
quote! { #f }.into()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
@ -12,7 +12,7 @@ use quote::{ToTokens, quote};
|
||||
use std::cmp::PartialEq;
|
||||
use syn::parse::{Parse, ParseStream};
|
||||
|
||||
struct Extract {
|
||||
pub struct Extract {
|
||||
state: State,
|
||||
stacks: Vec<Stack>,
|
||||
}
|
||||
@ -27,8 +27,23 @@ impl Parse for Extract {
|
||||
|
||||
impl ToTokens for Extract {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream2) {
|
||||
let state = &self.state;
|
||||
let inner_state = &self.state.0;
|
||||
let stacks = &self.stacks;
|
||||
|
||||
let mut counts = Vec::new();
|
||||
for stack in stacks {
|
||||
match counts.iter_mut().find(|(x, _)| x == stack) {
|
||||
Some((_, count)) => *count += 1,
|
||||
None => counts.push((stack, 1)),
|
||||
}
|
||||
}
|
||||
|
||||
for (stack, count) in counts {
|
||||
let inner_stack = &stack.0;
|
||||
tokens.extend(quote! {
|
||||
#inner_state.#inner_stack < #count
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user