mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-22 18:19:54 -04:00
FEATURE: Allow filtrator expressions to return boolean.
Also a bugfix where we were accidentally mapping instead of filtering.
This commit is contained in:
parent
8d3ab20f5c
commit
f982194518
@ -8,6 +8,10 @@ let filtrator = macro(item) => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let boolfiltrator = macro(item) => {
|
||||||
|
result = item < 5,
|
||||||
|
};
|
||||||
|
|
||||||
assert |map mapper.result list1 == [2, 3, 4, 5]|;
|
assert |map mapper.result list1 == [2, 3, 4, 5]|;
|
||||||
assert |(map mapper.result [1, 2, 3, 4]) == [2, 3, 4, 5]|;
|
assert |(map mapper.result [1, 2, 3, 4]) == [2, 3, 4, 5]|;
|
||||||
assert |map mapper.result [1, 2, 3, 4] == [2, 3, 4, 5]|;
|
assert |map mapper.result [1, 2, 3, 4] == [2, 3, 4, 5]|;
|
||||||
@ -15,3 +19,4 @@ assert |map mapper.result [1, 2, 3, 4] == [2, 3, 4, 5]|;
|
|||||||
assert |filter filtrator.result list2 == ["foo", "foo"]|;
|
assert |filter filtrator.result list2 == ["foo", "foo"]|;
|
||||||
assert |(filter filtrator.result ["foo", "bar", "foo", "bar"]) == ["foo", "foo"]|;
|
assert |(filter filtrator.result ["foo", "bar", "foo", "bar"]) == ["foo", "foo"]|;
|
||||||
assert |filter filtrator.result ["foo", "bar", "foo", "bar"] == ["foo", "foo"]|;
|
assert |filter filtrator.result ["foo", "bar", "foo", "bar"] == ["foo", "foo"]|;
|
||||||
|
assert |filter boolfiltrator.result [1, 2, 3, 4, 5, 6, 7] == [1, 2, 3, 4]|;
|
@ -1151,8 +1151,8 @@ impl<'a> Builder<'a> {
|
|||||||
let mac = &def.mac;
|
let mac = &def.mac;
|
||||||
if let &Val::Macro(ref macdef) = try!(self.lookup_selector(&mac.sel)).as_ref() {
|
if let &Val::Macro(ref macdef) = try!(self.lookup_selector(&mac.sel)).as_ref() {
|
||||||
let mut out = Vec::new();
|
let mut out = Vec::new();
|
||||||
for expr in l.iter() {
|
for item in l.iter() {
|
||||||
let argvals = vec![expr.clone()];
|
let argvals = vec![item.clone()];
|
||||||
let fields = try!(macdef.eval(
|
let fields = try!(macdef.eval(
|
||||||
self.root.clone(),
|
self.root.clone(),
|
||||||
self.assets.clone(),
|
self.assets.clone(),
|
||||||
@ -1168,8 +1168,11 @@ impl<'a> Builder<'a> {
|
|||||||
if let &Val::Empty = v.as_ref() {
|
if let &Val::Empty = v.as_ref() {
|
||||||
// noop
|
// noop
|
||||||
continue;
|
continue;
|
||||||
|
} else if let &Val::Boolean(false) = v.as_ref() {
|
||||||
|
// noop
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
out.push(v.clone());
|
out.push(item.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1225,9 +1228,11 @@ impl<'a> Builder<'a> {
|
|||||||
} else {
|
} else {
|
||||||
// record an assertion type-failure result.
|
// record an assertion type-failure result.
|
||||||
let msg = format!(
|
let msg = format!(
|
||||||
"TYPE FAIL - '{}' at line: {} column: {}\n",
|
"TYPE FAIL - '{}' Expected Boolean got {} at line: {} column: {}\n",
|
||||||
expr, tok.pos.line, tok.pos.column
|
expr, ok, tok.pos.line, tok.pos.column
|
||||||
);
|
);
|
||||||
|
self.assert_collector.failures.push_str(&msg);
|
||||||
|
self.assert_collector.success = false;
|
||||||
self.assert_collector.summary.push_str(&msg);
|
self.assert_collector.summary.push_str(&msg);
|
||||||
}
|
}
|
||||||
Ok(ok)
|
Ok(ok)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user