refactor test
This commit is contained in:
+2
-8
@@ -430,10 +430,7 @@ impl<'a, Ctx: BytecodeContext> BytecodeEmitter<'a, Ctx> {
|
|||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, &id)| (id, thunk_base + i as u32))
|
.map(|(i, &id)| (id, thunk_base + i as u32))
|
||||||
.collect();
|
.collect();
|
||||||
self.scope_stack.push(ScopeInfo {
|
self.scope_stack.push(ScopeInfo { depth, thunk_map });
|
||||||
depth,
|
|
||||||
thunk_map,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pop_scope(&mut self) {
|
fn pop_scope(&mut self) {
|
||||||
@@ -577,10 +574,7 @@ impl<'a, Ctx: BytecodeContext> BytecodeEmitter<'a, Ctx> {
|
|||||||
self.emit_u32(span_id);
|
self.emit_u32(span_id);
|
||||||
}
|
}
|
||||||
&Ir::Arg { layer } => {
|
&Ir::Arg { layer } => {
|
||||||
self.emit_load(
|
self.emit_load(layer.try_into().expect("scope too deep!"), 0);
|
||||||
layer.try_into().expect("scope too deep!"),
|
|
||||||
0,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
&Ir::TopLevel { body, ref thunks } => {
|
&Ir::TopLevel { body, ref thunks } => {
|
||||||
self.emit_toplevel_inner(body, thunks);
|
self.emit_toplevel_inner(body, thunks);
|
||||||
|
|||||||
+11
-3
@@ -140,15 +140,23 @@ impl<'a, Ctx: DisassemblerContext> Disassembler<'a, Ctx> {
|
|||||||
temp
|
temp
|
||||||
};
|
};
|
||||||
|
|
||||||
let extra_width = if start_pos > 0 { start_pos.ilog2() >> 4 } else { 0 };
|
let extra_width = if start_pos > 0 {
|
||||||
|
start_pos.ilog2() >> 4
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
if color {
|
if color {
|
||||||
let _ = write!(out, " ");
|
let _ = write!(out, " ");
|
||||||
for _ in 0..extra_width { let _ = write!(out, " "); }
|
for _ in 0..extra_width {
|
||||||
|
let _ = write!(out, " ");
|
||||||
|
}
|
||||||
let _ = writeln!(out, " {:<14} |", bytes_str.green());
|
let _ = writeln!(out, " {:<14} |", bytes_str.green());
|
||||||
} else {
|
} else {
|
||||||
let _ = write!(out, " ");
|
let _ = write!(out, " ");
|
||||||
for _ in 0..extra_width { let _ = write!(out, " "); }
|
for _ in 0..extra_width {
|
||||||
|
let _ = write!(out, " ");
|
||||||
|
}
|
||||||
let _ = writeln!(out, " {:<14} |", bytes_str);
|
let _ = writeln!(out, " {:<14} |", bytes_str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -394,8 +394,7 @@ impl<'id: 'ir, 'ir, Ctx: DowngradeContext<'id, 'ir>> Downgrade<'id, 'ir, Ctx> fo
|
|||||||
let param_sym = ctx.new_sym(id.to_string());
|
let param_sym = ctx.new_sym(id.to_string());
|
||||||
param = None;
|
param = None;
|
||||||
|
|
||||||
body = ctx
|
body = ctx.with_param_scope(param_sym, |ctx| body_ast.downgrade(ctx))?;
|
||||||
.with_param_scope(param_sym, |ctx| body_ast.downgrade(ctx))?;
|
|
||||||
}
|
}
|
||||||
ast::Param::Pattern(pattern) => {
|
ast::Param::Pattern(pattern) => {
|
||||||
let alias = pattern
|
let alias = pattern
|
||||||
@@ -992,7 +991,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let arg= ctx.new_expr(Ir::Arg { layer: 0 });
|
let arg = ctx.new_expr(Ir::Arg { layer: 0 });
|
||||||
ctx.with_let_scope(&keys, |ctx| {
|
ctx.with_let_scope(&keys, |ctx| {
|
||||||
let vals = params
|
let vals = params
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|||||||
+3
-1
@@ -128,7 +128,9 @@ pub enum Ir<'ir, Ref> {
|
|||||||
param: Option<Param<'ir>>,
|
param: Option<Param<'ir>>,
|
||||||
thunks: Vec<'ir, (ThunkId, Ref)>,
|
thunks: Vec<'ir, (ThunkId, Ref)>,
|
||||||
},
|
},
|
||||||
Arg { layer: usize },
|
Arg {
|
||||||
|
layer: usize,
|
||||||
|
},
|
||||||
Call {
|
Call {
|
||||||
func: Ref,
|
func: Ref,
|
||||||
arg: Ref,
|
arg: Ref,
|
||||||
|
|||||||
+25
-10
@@ -94,6 +94,7 @@ impl<'gc> GcRoot<'gc> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
#[track_caller]
|
||||||
pub(super) fn pop_stack_forced(&mut self) -> StrictValue<'gc> {
|
pub(super) fn pop_stack_forced(&mut self) -> StrictValue<'gc> {
|
||||||
self.stack
|
self.stack
|
||||||
.pop()
|
.pop()
|
||||||
@@ -1282,7 +1283,10 @@ impl Runtime {
|
|||||||
|
|
||||||
let (is_list, is_attrs) = self.arena.mutate_root(|_, root| {
|
let (is_list, is_attrs) = self.arena.mutate_root(|_, root| {
|
||||||
let tos = *root.stack.tos().expect("stack underflow");
|
let tos = *root.stack.tos().expect("stack underflow");
|
||||||
(tos.as_gc::<List<'_>>().is_some(), tos.as_gc::<AttrSet<'_>>().is_some())
|
(
|
||||||
|
tos.as_gc::<List<'_>>().is_some(),
|
||||||
|
tos.as_gc::<AttrSet<'_>>().is_some(),
|
||||||
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
if is_list {
|
if is_list {
|
||||||
@@ -1303,7 +1307,8 @@ impl Runtime {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if let err @ Action::Done(Err(_)) = self.force_tos() {
|
if let err @ Action::Done(Err(_)) = self.force_tos() {
|
||||||
self.arena.mutate_root(|_, root| root.temp_stack.truncate(eval_base - len));
|
self.arena
|
||||||
|
.mutate_root(|_, root| root.temp_stack.truncate(eval_base - len));
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1314,14 +1319,16 @@ impl Runtime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.arena.mutate_root(|mc, root| {
|
self.arena.mutate_root(|mc, root| {
|
||||||
let items: SmallVec<[Value; 4]> = root.temp_stack[eval_base - len..eval_base].iter().copied().collect();
|
let items: SmallVec<[Value; 4]> = root.temp_stack[eval_base - len..eval_base]
|
||||||
|
.iter()
|
||||||
|
.copied()
|
||||||
|
.collect();
|
||||||
root.temp_stack.truncate(eval_base - len);
|
root.temp_stack.truncate(eval_base - len);
|
||||||
|
|
||||||
// Reconstruct List
|
// Reconstruct List
|
||||||
let new_list = Gc::new(mc, List { inner: items });
|
let new_list = Gc::new(mc, List { inner: items });
|
||||||
root.push_stack(Value::new_gc(new_list));
|
root.push_stack(Value::new_gc(new_list));
|
||||||
});
|
});
|
||||||
|
|
||||||
} else if is_attrs {
|
} else if is_attrs {
|
||||||
let len = self.arena.mutate_root(|_, root| {
|
let len = self.arena.mutate_root(|_, root| {
|
||||||
let attrs = root.pop_stack().as_gc::<AttrSet<'_>>().unwrap();
|
let attrs = root.pop_stack().as_gc::<AttrSet<'_>>().unwrap();
|
||||||
@@ -1341,7 +1348,8 @@ impl Runtime {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if let err @ Action::Done(Err(_)) = self.force_tos() {
|
if let err @ Action::Done(Err(_)) = self.force_tos() {
|
||||||
self.arena.mutate_root(|_, root| root.temp_stack.truncate(eval_base - len * 2));
|
self.arena
|
||||||
|
.mutate_root(|_, root| root.temp_stack.truncate(eval_base - len * 2));
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1378,7 +1386,10 @@ impl Runtime {
|
|||||||
|
|
||||||
let (is_list, is_attrs) = self.arena.mutate_root(|_, root| {
|
let (is_list, is_attrs) = self.arena.mutate_root(|_, root| {
|
||||||
let tos = *root.stack.tos().expect("stack underflow");
|
let tos = *root.stack.tos().expect("stack underflow");
|
||||||
(tos.as_gc::<List<'_>>().is_some(), tos.as_gc::<AttrSet<'_>>().is_some())
|
(
|
||||||
|
tos.as_gc::<List<'_>>().is_some(),
|
||||||
|
tos.as_gc::<AttrSet<'_>>().is_some(),
|
||||||
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
if is_list {
|
if is_list {
|
||||||
@@ -1399,7 +1410,8 @@ impl Runtime {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if let err @ Action::Done(Err(_)) = self.force_tos_deep() {
|
if let err @ Action::Done(Err(_)) = self.force_tos_deep() {
|
||||||
self.arena.mutate_root(|_, root| root.temp_stack.truncate(eval_base - len));
|
self.arena
|
||||||
|
.mutate_root(|_, root| root.temp_stack.truncate(eval_base - len));
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1410,12 +1422,14 @@ impl Runtime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.arena.mutate_root(|mc, root| {
|
self.arena.mutate_root(|mc, root| {
|
||||||
let items: SmallVec<[Value; 4]> = root.temp_stack[eval_base - len..eval_base].iter().copied().collect();
|
let items: SmallVec<[Value; 4]> = root.temp_stack[eval_base - len..eval_base]
|
||||||
|
.iter()
|
||||||
|
.copied()
|
||||||
|
.collect();
|
||||||
root.temp_stack.truncate(eval_base - len);
|
root.temp_stack.truncate(eval_base - len);
|
||||||
let new_list = Gc::new(mc, List { inner: items });
|
let new_list = Gc::new(mc, List { inner: items });
|
||||||
root.push_stack(Value::new_gc(new_list));
|
root.push_stack(Value::new_gc(new_list));
|
||||||
});
|
});
|
||||||
|
|
||||||
} else if is_attrs {
|
} else if is_attrs {
|
||||||
let len = self.arena.mutate_root(|_, root| {
|
let len = self.arena.mutate_root(|_, root| {
|
||||||
let attrs = root.pop_stack().as_gc::<AttrSet<'_>>().unwrap();
|
let attrs = root.pop_stack().as_gc::<AttrSet<'_>>().unwrap();
|
||||||
@@ -1435,7 +1449,8 @@ impl Runtime {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if let err @ Action::Done(Err(_)) = self.force_tos_deep() {
|
if let err @ Action::Done(Err(_)) = self.force_tos_deep() {
|
||||||
self.arena.mutate_root(|_, root| root.temp_stack.truncate(eval_base - len * 2));
|
self.arena
|
||||||
|
.mutate_root(|_, root| root.temp_stack.truncate(eval_base - len * 2));
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+234
-226
@@ -89,230 +89,238 @@ macro_rules! eval_fail_test {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
eval_okay_test!(any_all);
|
mod okay {
|
||||||
eval_okay_test!(arithmetic);
|
use super::*;
|
||||||
eval_okay_test!(attrnames);
|
|
||||||
eval_okay_test!(attrs);
|
|
||||||
eval_okay_test!(attrs2);
|
|
||||||
eval_okay_test!(attrs3);
|
|
||||||
eval_okay_test!(attrs4);
|
|
||||||
eval_okay_test!(attrs5);
|
|
||||||
eval_okay_test!(
|
|
||||||
#[ignore = "__overrides is not supported"]
|
|
||||||
attrs6
|
|
||||||
);
|
|
||||||
eval_okay_test!(
|
|
||||||
#[ignore = "requires --arg/--argstr CLI flags"]
|
|
||||||
autoargs
|
|
||||||
);
|
|
||||||
eval_okay_test!(backslash_newline_1);
|
|
||||||
eval_okay_test!(backslash_newline_2);
|
|
||||||
eval_okay_test!(baseNameOf);
|
|
||||||
eval_okay_test!(builtins);
|
|
||||||
eval_okay_test!(builtins_add);
|
|
||||||
eval_okay_test!(callable_attrs);
|
|
||||||
eval_okay_test!(catattrs);
|
|
||||||
eval_okay_test!(closure);
|
|
||||||
eval_okay_test!(comments);
|
|
||||||
eval_okay_test!(concat);
|
|
||||||
eval_okay_test!(concatmap);
|
|
||||||
eval_okay_test!(concatstringssep);
|
|
||||||
eval_okay_test!(context);
|
|
||||||
eval_okay_test!(context_introspection);
|
|
||||||
eval_okay_test!(convertHash);
|
|
||||||
eval_okay_test!(curpos);
|
|
||||||
eval_okay_test!(deepseq);
|
|
||||||
eval_okay_test!(delayed_with);
|
|
||||||
eval_okay_test!(delayed_with_inherit);
|
|
||||||
eval_okay_test!(deprecate_cursed_or);
|
|
||||||
eval_okay_test!(derivation_legacy);
|
|
||||||
eval_okay_test!(dynamic_attrs);
|
|
||||||
eval_okay_test!(dynamic_attrs_2);
|
|
||||||
eval_okay_test!(dynamic_attrs_bare);
|
|
||||||
eval_okay_test!(elem);
|
|
||||||
eval_okay_test!(empty_args);
|
|
||||||
eval_okay_test!(eq);
|
|
||||||
eval_okay_test!(eq_derivations);
|
|
||||||
eval_okay_test!(filter);
|
|
||||||
eval_okay_test!(
|
|
||||||
#[ignore = "not implemented: flakeRefToString"]
|
|
||||||
flake_ref_to_string
|
|
||||||
);
|
|
||||||
eval_okay_test!(flatten);
|
|
||||||
eval_okay_test!(float);
|
|
||||||
eval_okay_test!(floor_ceil);
|
|
||||||
eval_okay_test!(foldlStrict);
|
|
||||||
eval_okay_test!(foldlStrict_lazy_elements);
|
|
||||||
eval_okay_test!(foldlStrict_lazy_initial_accumulator);
|
|
||||||
eval_okay_test!(fromjson);
|
|
||||||
eval_okay_test!(fromjson_escapes);
|
|
||||||
eval_okay_test!(fromTOML);
|
|
||||||
eval_okay_test!(
|
|
||||||
#[ignore = "timestamps are not supported"]
|
|
||||||
fromTOML_timestamps
|
|
||||||
);
|
|
||||||
eval_okay_test!(functionargs);
|
|
||||||
eval_okay_test!(hashfile);
|
|
||||||
eval_okay_test!(hashstring);
|
|
||||||
eval_okay_test!(getattrpos);
|
|
||||||
eval_okay_test!(getattrpos_functionargs);
|
|
||||||
eval_okay_test!(getattrpos_undefined);
|
|
||||||
eval_okay_test!(getenv, || {
|
|
||||||
unsafe { std::env::set_var("TEST_VAR", "foo") };
|
|
||||||
});
|
|
||||||
eval_okay_test!(groupBy);
|
|
||||||
eval_okay_test!(r#if);
|
|
||||||
eval_okay_test!(ind_string);
|
|
||||||
eval_okay_test!(import);
|
|
||||||
eval_okay_test!(inherit_attr_pos);
|
|
||||||
eval_okay_test!(
|
|
||||||
#[ignore = "__overrides is not supported"]
|
|
||||||
inherit_from
|
|
||||||
);
|
|
||||||
eval_okay_test!(intersectAttrs);
|
|
||||||
eval_okay_test!(r#let);
|
|
||||||
eval_okay_test!(list);
|
|
||||||
eval_okay_test!(listtoattrs);
|
|
||||||
eval_okay_test!(logic);
|
|
||||||
eval_okay_test!(map);
|
|
||||||
eval_okay_test!(mapattrs);
|
|
||||||
eval_okay_test!(merge_dynamic_attrs);
|
|
||||||
eval_okay_test!(nested_with);
|
|
||||||
eval_okay_test!(new_let);
|
|
||||||
eval_okay_test!(null_dynamic_attrs);
|
|
||||||
eval_okay_test!(
|
|
||||||
#[ignore = "__overrides is not supported"]
|
|
||||||
overrides
|
|
||||||
);
|
|
||||||
eval_okay_test!(
|
|
||||||
#[ignore = "not implemented: parseFlakeRef"]
|
|
||||||
parse_flake_ref
|
|
||||||
);
|
|
||||||
eval_okay_test!(partition);
|
|
||||||
eval_okay_test!(path);
|
|
||||||
eval_okay_test!(pathexists);
|
|
||||||
eval_okay_test!(path_string_interpolation, || {
|
|
||||||
unsafe {
|
|
||||||
std::env::set_var("HOME", "/fake-home");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
eval_okay_test!(patterns);
|
|
||||||
eval_okay_test!(print);
|
|
||||||
eval_okay_test!(readDir);
|
|
||||||
eval_okay_test!(readfile);
|
|
||||||
eval_okay_test!(readFileType);
|
|
||||||
eval_okay_test!(redefine_builtin);
|
|
||||||
eval_okay_test!(regex_match);
|
|
||||||
eval_okay_test!(regex_split);
|
|
||||||
eval_okay_test!(regression_20220122);
|
|
||||||
eval_okay_test!(regression_20220125);
|
|
||||||
eval_okay_test!(regrettable_rec_attrset_merge);
|
|
||||||
eval_okay_test!(remove);
|
|
||||||
eval_okay_test!(repeated_empty_attrs);
|
|
||||||
eval_okay_test!(repeated_empty_list);
|
|
||||||
eval_okay_test!(replacestrings);
|
|
||||||
eval_okay_test!(
|
|
||||||
#[ignore = "requires -I CLI flags"]
|
|
||||||
search_path
|
|
||||||
);
|
|
||||||
eval_okay_test!(scope_1);
|
|
||||||
eval_okay_test!(scope_2);
|
|
||||||
eval_okay_test!(scope_3);
|
|
||||||
eval_okay_test!(scope_4);
|
|
||||||
eval_okay_test!(scope_6);
|
|
||||||
eval_okay_test!(scope_7);
|
|
||||||
eval_okay_test!(seq);
|
|
||||||
eval_okay_test!(sort);
|
|
||||||
eval_okay_test!(splitversion);
|
|
||||||
eval_okay_test!(string);
|
|
||||||
eval_okay_test!(strings_as_attrs_names);
|
|
||||||
eval_okay_test!(substring);
|
|
||||||
eval_okay_test!(substring_context);
|
|
||||||
eval_okay_test!(symlink_resolution);
|
|
||||||
eval_okay_test!(
|
|
||||||
#[ignore = "TCO not implemented, also disabled in CppNix"]
|
|
||||||
tail_call_1
|
|
||||||
);
|
|
||||||
eval_okay_test!(tojson);
|
|
||||||
eval_okay_test!(toxml);
|
|
||||||
eval_okay_test!(toxml2);
|
|
||||||
eval_okay_test!(tryeval);
|
|
||||||
eval_okay_test!(types);
|
|
||||||
eval_okay_test!(versions);
|
|
||||||
eval_okay_test!(with);
|
|
||||||
eval_okay_test!(zipAttrsWith);
|
|
||||||
|
|
||||||
eval_fail_test!(fail_abort);
|
eval_okay_test!(any_all);
|
||||||
eval_fail_test!(fail_addDrvOutputDependencies_empty_context);
|
eval_okay_test!(arithmetic);
|
||||||
eval_fail_test!(fail_addDrvOutputDependencies_multi_elem_context);
|
eval_okay_test!(attrnames);
|
||||||
eval_fail_test!(fail_addDrvOutputDependencies_wrong_element_kind);
|
eval_okay_test!(attrs);
|
||||||
eval_fail_test!(fail_addErrorRuntime_example);
|
eval_okay_test!(attrs2);
|
||||||
eval_fail_test!(fail_assert);
|
eval_okay_test!(attrs3);
|
||||||
eval_fail_test!(fail_assert_equal_attrs_names);
|
eval_okay_test!(attrs4);
|
||||||
eval_fail_test!(fail_assert_equal_attrs_names_2);
|
eval_okay_test!(attrs5);
|
||||||
eval_fail_test!(fail_assert_equal_derivations);
|
eval_okay_test!(
|
||||||
eval_fail_test!(fail_assert_equal_derivations_extra);
|
#[ignore = "__overrides is not supported"]
|
||||||
eval_fail_test!(fail_assert_equal_floats);
|
attrs6
|
||||||
eval_fail_test!(fail_assert_equal_function_direct);
|
);
|
||||||
eval_fail_test!(fail_assert_equal_int_float);
|
eval_okay_test!(
|
||||||
eval_fail_test!(fail_assert_equal_ints);
|
#[ignore = "requires --arg/--argstr CLI flags"]
|
||||||
eval_fail_test!(fail_assert_equal_list_length);
|
autoargs
|
||||||
eval_fail_test!(fail_assert_equal_paths);
|
);
|
||||||
eval_fail_test!(fail_assert_equal_type);
|
eval_okay_test!(backslash_newline_1);
|
||||||
eval_fail_test!(fail_assert_equal_type_nested);
|
eval_okay_test!(backslash_newline_2);
|
||||||
eval_fail_test!(fail_assert_nested_bool);
|
eval_okay_test!(baseNameOf);
|
||||||
eval_fail_test!(fail_attr_name_type);
|
eval_okay_test!(builtins);
|
||||||
eval_fail_test!(fail_attrset_merge_drops_later_rec);
|
eval_okay_test!(builtins_add);
|
||||||
eval_fail_test!(fail_bad_string_interpolation_1);
|
eval_okay_test!(callable_attrs);
|
||||||
eval_fail_test!(fail_bad_string_interpolation_2);
|
eval_okay_test!(catattrs);
|
||||||
eval_fail_test!(fail_bad_string_interpolation_3);
|
eval_okay_test!(closure);
|
||||||
eval_fail_test!(fail_bad_string_interpolation_4);
|
eval_okay_test!(comments);
|
||||||
eval_fail_test!(fail_blackhole);
|
eval_okay_test!(concat);
|
||||||
eval_fail_test!(fail_call_primop);
|
eval_okay_test!(concatmap);
|
||||||
eval_fail_test!(fail_deepseq);
|
eval_okay_test!(concatstringssep);
|
||||||
eval_fail_test!(fail_derivation_name);
|
eval_okay_test!(context);
|
||||||
eval_fail_test!(fail_dup_dynamic_attrs);
|
eval_okay_test!(context_introspection);
|
||||||
eval_fail_test!(fail_duplicate_traces);
|
eval_okay_test!(convertHash);
|
||||||
eval_fail_test!(fail_eol_1);
|
eval_okay_test!(curpos);
|
||||||
eval_fail_test!(fail_eol_2);
|
eval_okay_test!(deepseq);
|
||||||
eval_fail_test!(fail_eol_3);
|
eval_okay_test!(delayed_with);
|
||||||
eval_fail_test!(fail_fetchTree_negative);
|
eval_okay_test!(delayed_with_inherit);
|
||||||
eval_fail_test!(fail_fetchurl_baseName);
|
eval_okay_test!(deprecate_cursed_or);
|
||||||
eval_fail_test!(fail_fetchurl_baseName_attrs);
|
eval_okay_test!(derivation_legacy);
|
||||||
eval_fail_test!(fail_fetchurl_baseName_attrs_name);
|
eval_okay_test!(dynamic_attrs);
|
||||||
eval_fail_test!(fail_flake_ref_to_string_negative_integer);
|
eval_okay_test!(dynamic_attrs_2);
|
||||||
eval_fail_test!(fail_foldlStrict_strict_op_application);
|
eval_okay_test!(dynamic_attrs_bare);
|
||||||
eval_fail_test!(fail_fromJSON_keyWithNullByte);
|
eval_okay_test!(elem);
|
||||||
eval_fail_test!(fail_fromJSON_overflowing);
|
eval_okay_test!(empty_args);
|
||||||
eval_fail_test!(fail_fromJSON_valueWithNullByte);
|
eval_okay_test!(eq);
|
||||||
eval_fail_test!(fail_fromTOML_keyWithNullByte);
|
eval_okay_test!(eq_derivations);
|
||||||
eval_fail_test!(fail_fromTOML_timestamps);
|
eval_okay_test!(filter);
|
||||||
eval_fail_test!(fail_fromTOML_valueWithNullByte);
|
eval_okay_test!(
|
||||||
eval_fail_test!(fail_hashfile_missing);
|
#[ignore = "not implemented: flakeRefToString"]
|
||||||
eval_fail_test!(fail_infinite_recursion_lambda);
|
flake_ref_to_string
|
||||||
eval_fail_test!(fail_list);
|
);
|
||||||
eval_fail_test!(fail_missing_arg);
|
eval_okay_test!(flatten);
|
||||||
eval_fail_test!(fail_mutual_recursion);
|
eval_okay_test!(float);
|
||||||
eval_fail_test!(fail_nested_list_items);
|
eval_okay_test!(floor_ceil);
|
||||||
eval_fail_test!(fail_nonexist_path);
|
eval_okay_test!(foldlStrict);
|
||||||
eval_fail_test!(fail_not_throws);
|
eval_okay_test!(foldlStrict_lazy_elements);
|
||||||
eval_fail_test!(fail_overflowing_add);
|
eval_okay_test!(foldlStrict_lazy_initial_accumulator);
|
||||||
eval_fail_test!(fail_overflowing_div);
|
eval_okay_test!(fromjson);
|
||||||
eval_fail_test!(fail_overflowing_mul);
|
eval_okay_test!(fromjson_escapes);
|
||||||
eval_fail_test!(fail_overflowing_sub);
|
eval_okay_test!(fromTOML);
|
||||||
eval_fail_test!(fail_path_slash);
|
eval_okay_test!(
|
||||||
eval_fail_test!(fail_pipe_operators);
|
#[ignore = "timestamps are not supported"]
|
||||||
eval_fail_test!(fail_recursion);
|
fromTOML_timestamps
|
||||||
eval_fail_test!(fail_remove);
|
);
|
||||||
eval_fail_test!(fail_scope_5);
|
eval_okay_test!(functionargs);
|
||||||
eval_fail_test!(fail_seq);
|
eval_okay_test!(hashfile);
|
||||||
eval_fail_test!(fail_set);
|
eval_okay_test!(hashstring);
|
||||||
eval_fail_test!(fail_set_override);
|
eval_okay_test!(getattrpos);
|
||||||
eval_fail_test!(fail_string_nul_1);
|
eval_okay_test!(getattrpos_functionargs);
|
||||||
eval_fail_test!(fail_string_nul_2);
|
eval_okay_test!(getattrpos_undefined);
|
||||||
eval_fail_test!(fail_substring);
|
eval_okay_test!(getenv, || {
|
||||||
eval_fail_test!(fail_toJSON);
|
unsafe { std::env::set_var("TEST_VAR", "foo") };
|
||||||
eval_fail_test!(fail_toJSON_non_utf_8);
|
});
|
||||||
eval_fail_test!(fail_to_path);
|
eval_okay_test!(groupBy);
|
||||||
eval_fail_test!(fail_undeclared_arg);
|
eval_okay_test!(r#if);
|
||||||
eval_fail_test!(fail_using_set_as_attr_name);
|
eval_okay_test!(ind_string);
|
||||||
|
eval_okay_test!(import);
|
||||||
|
eval_okay_test!(inherit_attr_pos);
|
||||||
|
eval_okay_test!(
|
||||||
|
#[ignore = "__overrides is not supported"]
|
||||||
|
inherit_from
|
||||||
|
);
|
||||||
|
eval_okay_test!(intersectAttrs);
|
||||||
|
eval_okay_test!(r#let);
|
||||||
|
eval_okay_test!(list);
|
||||||
|
eval_okay_test!(listtoattrs);
|
||||||
|
eval_okay_test!(logic);
|
||||||
|
eval_okay_test!(map);
|
||||||
|
eval_okay_test!(mapattrs);
|
||||||
|
eval_okay_test!(merge_dynamic_attrs);
|
||||||
|
eval_okay_test!(nested_with);
|
||||||
|
eval_okay_test!(new_let);
|
||||||
|
eval_okay_test!(null_dynamic_attrs);
|
||||||
|
eval_okay_test!(
|
||||||
|
#[ignore = "__overrides is not supported"]
|
||||||
|
overrides
|
||||||
|
);
|
||||||
|
eval_okay_test!(
|
||||||
|
#[ignore = "not implemented: parseFlakeRef"]
|
||||||
|
parse_flake_ref
|
||||||
|
);
|
||||||
|
eval_okay_test!(partition);
|
||||||
|
eval_okay_test!(path);
|
||||||
|
eval_okay_test!(pathexists);
|
||||||
|
eval_okay_test!(path_string_interpolation, || {
|
||||||
|
unsafe {
|
||||||
|
std::env::set_var("HOME", "/fake-home");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
eval_okay_test!(patterns);
|
||||||
|
eval_okay_test!(print);
|
||||||
|
eval_okay_test!(readDir);
|
||||||
|
eval_okay_test!(readfile);
|
||||||
|
eval_okay_test!(readFileType);
|
||||||
|
eval_okay_test!(redefine_builtin);
|
||||||
|
eval_okay_test!(regex_match);
|
||||||
|
eval_okay_test!(regex_split);
|
||||||
|
eval_okay_test!(regression_20220122);
|
||||||
|
eval_okay_test!(regression_20220125);
|
||||||
|
eval_okay_test!(regrettable_rec_attrset_merge);
|
||||||
|
eval_okay_test!(remove);
|
||||||
|
eval_okay_test!(repeated_empty_attrs);
|
||||||
|
eval_okay_test!(repeated_empty_list);
|
||||||
|
eval_okay_test!(replacestrings);
|
||||||
|
eval_okay_test!(
|
||||||
|
#[ignore = "requires -I CLI flags"]
|
||||||
|
search_path
|
||||||
|
);
|
||||||
|
eval_okay_test!(scope_1);
|
||||||
|
eval_okay_test!(scope_2);
|
||||||
|
eval_okay_test!(scope_3);
|
||||||
|
eval_okay_test!(scope_4);
|
||||||
|
eval_okay_test!(scope_6);
|
||||||
|
eval_okay_test!(scope_7);
|
||||||
|
eval_okay_test!(seq);
|
||||||
|
eval_okay_test!(sort);
|
||||||
|
eval_okay_test!(splitversion);
|
||||||
|
eval_okay_test!(string);
|
||||||
|
eval_okay_test!(strings_as_attrs_names);
|
||||||
|
eval_okay_test!(substring);
|
||||||
|
eval_okay_test!(substring_context);
|
||||||
|
eval_okay_test!(symlink_resolution);
|
||||||
|
eval_okay_test!(
|
||||||
|
#[ignore = "TCO not implemented, also disabled in CppNix"]
|
||||||
|
tail_call_1
|
||||||
|
);
|
||||||
|
eval_okay_test!(tojson);
|
||||||
|
eval_okay_test!(toxml);
|
||||||
|
eval_okay_test!(toxml2);
|
||||||
|
eval_okay_test!(tryeval);
|
||||||
|
eval_okay_test!(types);
|
||||||
|
eval_okay_test!(versions);
|
||||||
|
eval_okay_test!(with);
|
||||||
|
eval_okay_test!(zipAttrsWith);
|
||||||
|
}
|
||||||
|
|
||||||
|
mod fail {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
eval_fail_test!(abort);
|
||||||
|
eval_fail_test!(addDrvOutputDependencies_empty_context);
|
||||||
|
eval_fail_test!(addDrvOutputDependencies_multi_elem_context);
|
||||||
|
eval_fail_test!(addDrvOutputDependencies_wrong_element_kind);
|
||||||
|
eval_fail_test!(addErrorRuntime_example);
|
||||||
|
eval_fail_test!(assert);
|
||||||
|
eval_fail_test!(assert_equal_attrs_names);
|
||||||
|
eval_fail_test!(assert_equal_attrs_names_2);
|
||||||
|
eval_fail_test!(assert_equal_derivations);
|
||||||
|
eval_fail_test!(assert_equal_derivations_extra);
|
||||||
|
eval_fail_test!(assert_equal_floats);
|
||||||
|
eval_fail_test!(assert_equal_function_direct);
|
||||||
|
eval_fail_test!(assert_equal_int_float);
|
||||||
|
eval_fail_test!(assert_equal_ints);
|
||||||
|
eval_fail_test!(assert_equal_list_length);
|
||||||
|
eval_fail_test!(assert_equal_paths);
|
||||||
|
eval_fail_test!(assert_equal_type);
|
||||||
|
eval_fail_test!(assert_equal_type_nested);
|
||||||
|
eval_fail_test!(assert_nested_bool);
|
||||||
|
eval_fail_test!(attr_name_type);
|
||||||
|
eval_fail_test!(attrset_merge_drops_later_rec);
|
||||||
|
eval_fail_test!(bad_string_interpolation_1);
|
||||||
|
eval_fail_test!(bad_string_interpolation_2);
|
||||||
|
eval_fail_test!(bad_string_interpolation_3);
|
||||||
|
eval_fail_test!(bad_string_interpolation_4);
|
||||||
|
eval_fail_test!(blackhole);
|
||||||
|
eval_fail_test!(call_primop);
|
||||||
|
eval_fail_test!(deepseq);
|
||||||
|
eval_fail_test!(derivation_name);
|
||||||
|
eval_fail_test!(dup_dynamic_attrs);
|
||||||
|
eval_fail_test!(duplicate_traces);
|
||||||
|
eval_fail_test!(eol_1);
|
||||||
|
eval_fail_test!(eol_2);
|
||||||
|
eval_fail_test!(eol_3);
|
||||||
|
eval_fail_test!(fetchTree_negative);
|
||||||
|
eval_fail_test!(fetchurl_baseName);
|
||||||
|
eval_fail_test!(fetchurl_baseName_attrs);
|
||||||
|
eval_fail_test!(fetchurl_baseName_attrs_name);
|
||||||
|
eval_fail_test!(flake_ref_to_string_negative_integer);
|
||||||
|
eval_fail_test!(foldlStrict_strict_op_application);
|
||||||
|
eval_fail_test!(fromJSON_keyWithNullByte);
|
||||||
|
eval_fail_test!(fromJSON_overflowing);
|
||||||
|
eval_fail_test!(fromJSON_valueWithNullByte);
|
||||||
|
eval_fail_test!(fromTOML_keyWithNullByte);
|
||||||
|
eval_fail_test!(fromTOML_timestamps);
|
||||||
|
eval_fail_test!(fromTOML_valueWithNullByte);
|
||||||
|
eval_fail_test!(hashfile_missing);
|
||||||
|
eval_fail_test!(infinite_recursion_lambda);
|
||||||
|
eval_fail_test!(list);
|
||||||
|
eval_fail_test!(missing_arg);
|
||||||
|
eval_fail_test!(mutual_recursion);
|
||||||
|
eval_fail_test!(nested_list_items);
|
||||||
|
eval_fail_test!(nonexist_path);
|
||||||
|
eval_fail_test!(not_throws);
|
||||||
|
eval_fail_test!(overflowing_add);
|
||||||
|
eval_fail_test!(overflowing_div);
|
||||||
|
eval_fail_test!(overflowing_mul);
|
||||||
|
eval_fail_test!(overflowing_sub);
|
||||||
|
eval_fail_test!(path_slash);
|
||||||
|
eval_fail_test!(pipe_operators);
|
||||||
|
eval_fail_test!(recursion);
|
||||||
|
eval_fail_test!(remove);
|
||||||
|
eval_fail_test!(scope_5);
|
||||||
|
eval_fail_test!(seq);
|
||||||
|
eval_fail_test!(set);
|
||||||
|
eval_fail_test!(set_override);
|
||||||
|
eval_fail_test!(string_nul_1);
|
||||||
|
eval_fail_test!(string_nul_2);
|
||||||
|
eval_fail_test!(substring);
|
||||||
|
eval_fail_test!(toJSON);
|
||||||
|
eval_fail_test!(toJSON_non_utf_8);
|
||||||
|
eval_fail_test!(to_path);
|
||||||
|
eval_fail_test!(undeclared_arg);
|
||||||
|
eval_fail_test!(using_set_as_attr_name);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user