use cache_macro::cache;
use lru_cache::LruCache;
use std::ops;
#[derive(Clone, Eq, PartialEq, Hash, Debug, Ord, PartialOrd)]
struct NoCopyI32(i32);
impl ops::Add for NoCopyI32 {
type Output = NoCopyI32;
fn add(self, rhs: Self) -> Self {
NoCopyI32(self.0 + rhs.0)
}
}
impl ops::Sub for NoCopyI32 {
type Output = NoCopyI32;
fn sub(self, rhs: Self) -> Self {
NoCopyI32(self.0 - rhs.0)
}
}
#[test]
fn clone_only_type() {
#[cache(LruCache : LruCache::new(20))]
fn fib(x: NoCopyI32) -> NoCopyI32 {
if x <= NoCopyI32(1) {
NoCopyI32(1)
} else {
fib(x.clone() - NoCopyI32(1)) + fib(x - NoCopyI32(2))
}
}
assert_eq!(fib(NoCopyI32(19)), NoCopyI32(6765));
}