Skip to content

Commit

Permalink
Merge pull request #94 from Chia-Network/20240527-truthy-zero
Browse files Browse the repository at this point in the history
Truthiness test
  • Loading branch information
prozacchiwawa authored May 28, 2024
2 parents b75f117 + 7ca8b64 commit d34e918
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/compiler/clvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,14 @@ pub fn get_history_len(step: Rc<RunStep>) -> usize {

/// Generically determine whether a value is truthy.
pub fn truthy(sexp: Rc<SExp>) -> bool {
if NewStyleIntConversion::setting() {
// The previous truthy would not have taken account of all zero bit
// values of lengths other than zero.
if let SExp::Atom(_, a) | SExp::QuotedString(_, _, a) = sexp.borrow() {
return !a.is_empty();
}
}

// Fails for cons, but cons is truthy
atom_value(sexp).unwrap_or_else(|_| bi_one()) != bi_zero()
}
Expand Down
40 changes: 40 additions & 0 deletions src/tests/classic/zero_constant_generation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,43 @@ fn test_fuzz_constant_gen() {
test_parallel_run(test);
}
}

#[test]
fn test_truthy_in_constant_generation() {
let test_program = "(mod X %1 (defconst C (if %c 1 0)) X)";

let test_parallel_run = |test| {
let final_program_classic = test_program.replace("%1", "").replace("%c", test);
let final_program_23_1 = test_program
.replace("%1", "(include *standard-cl-23.1*)")
.replace("%c", test);
let classic = do_basic_run(&vec!["run".to_string(), final_program_classic]);
let new_ver = do_basic_run(&vec!["run".to_string(), final_program_23_1]);
let classic_output = do_basic_brun(&vec!["brun".to_string(), classic, "0x01".to_string()]);
let new_output = do_basic_brun(&vec!["brun".to_string(), new_ver, "0x01".to_string()]);
assert_eq!(classic_output, new_output);
};

for test in [
"0",
"\"\"",
"()",
"0x00",
"(concat 0 0)",
"(concat 0x00 0x00)",
"(concat 0 0x00)",
"(concat 1 0x00)",
"(concat -1 0x00)",
"(concat -129 0x00)",
"(concat 0x00 0)",
"(concat 0x00 1)",
"(concat 0x00 -1)",
"(concat 0x00 -129)",
"(concat 0x00 (sha256 0x00 0))",
"(concat 0x00 (sha256 0 0x00 0))",
]
.iter()
{
test_parallel_run(test);
}
}

0 comments on commit d34e918

Please sign in to comment.