diff --git a/Cargo.lock b/Cargo.lock index d0964893..d418338f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1712,7 +1712,7 @@ dependencies = [ [[package]] name = "rue-ast" -version = "0.7.1" +version = "0.8.0" dependencies = [ "paste", "rue-parser", @@ -1720,7 +1720,7 @@ dependencies = [ [[package]] name = "rue-cli" -version = "0.7.1" +version = "0.8.0" dependencies = [ "anyhow", "chialisp", @@ -1738,7 +1738,7 @@ dependencies = [ [[package]] name = "rue-compiler" -version = "0.7.1" +version = "0.8.0" dependencies = [ "clvmr", "expect-test", @@ -1763,14 +1763,14 @@ dependencies = [ [[package]] name = "rue-diagnostic" -version = "0.7.1" +version = "0.8.0" dependencies = [ "thiserror 2.0.14", ] [[package]] name = "rue-hir" -version = "0.7.1" +version = "0.8.0" dependencies = [ "derive_more", "expect-test", @@ -1787,14 +1787,14 @@ dependencies = [ [[package]] name = "rue-lexer" -version = "0.7.1" +version = "0.8.0" dependencies = [ "expect-test", ] [[package]] name = "rue-lir" -version = "0.7.1" +version = "0.8.0" dependencies = [ "chialisp", "clvm-traits", @@ -1811,7 +1811,7 @@ dependencies = [ [[package]] name = "rue-lsp" -version = "0.7.1" +version = "0.8.0" dependencies = [ "indexmap", "rowan", @@ -1827,7 +1827,7 @@ dependencies = [ [[package]] name = "rue-options" -version = "0.7.1" +version = "0.8.0" dependencies = [ "serde", "thiserror 2.0.14", @@ -1836,7 +1836,7 @@ dependencies = [ [[package]] name = "rue-parser" -version = "0.7.1" +version = "0.8.0" dependencies = [ "derive_more", "expect-test", @@ -1851,7 +1851,7 @@ dependencies = [ [[package]] name = "rue-tests" -version = "0.7.1" +version = "0.8.0" dependencies = [ "anyhow", "chialisp", @@ -1868,7 +1868,7 @@ dependencies = [ [[package]] name = "rue-types" -version = "0.7.1" +version = "0.8.0" dependencies = [ "clvmr", "derive_more", @@ -1883,7 +1883,7 @@ dependencies = [ [[package]] name = "rue-wasm" -version = "0.7.1" +version = "0.8.0" dependencies = [ "chialisp", "clvmr", diff --git a/Cargo.toml b/Cargo.toml index 96e640f8..c0d04494 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,15 +42,15 @@ cast_possible_truncation = "allow" case_sensitive_file_extension_comparisons = "allow" [workspace.dependencies] -rue-lexer = { path = "crates/rue-lexer", version = "0.7.1" } -rue-parser = { path = "crates/rue-parser", version = "0.7.1" } -rue-diagnostic = { path = "crates/rue-diagnostic", version = "0.7.1" } -rue-ast = { path = "crates/rue-ast", version = "0.7.1" } -rue-compiler = { path = "crates/rue-compiler", version = "0.7.1" } -rue-options = { path = "crates/rue-options", version = "0.7.1" } -rue-lir = { path = "crates/rue-lir", version = "0.7.1" } -rue-hir = { path = "crates/rue-hir", version = "0.7.1" } -rue-types = { path = "crates/rue-types", version = "0.7.1" } +rue-lexer = { path = "crates/rue-lexer", version = "0.8.0" } +rue-parser = { path = "crates/rue-parser", version = "0.8.0" } +rue-diagnostic = { path = "crates/rue-diagnostic", version = "0.8.0" } +rue-ast = { path = "crates/rue-ast", version = "0.8.0" } +rue-compiler = { path = "crates/rue-compiler", version = "0.8.0" } +rue-options = { path = "crates/rue-options", version = "0.8.0" } +rue-lir = { path = "crates/rue-lir", version = "0.8.0" } +rue-hir = { path = "crates/rue-hir", version = "0.8.0" } +rue-types = { path = "crates/rue-types", version = "0.8.0" } anyhow = "1.0.98" clvm-traits = "0.28.1" clvm-utils = "0.28.1" diff --git a/crates/rue-ast/Cargo.toml b/crates/rue-ast/Cargo.toml index 6c35da5a..1accaf04 100644 --- a/crates/rue-ast/Cargo.toml +++ b/crates/rue-ast/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-ast" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "An implementation of the Abstract Syntax Tree for the Rue compiler." diff --git a/crates/rue-ast/src/lib.rs b/crates/rue-ast/src/lib.rs index 904ae660..820aa07f 100644 --- a/crates/rue-ast/src/lib.rs +++ b/crates/rue-ast/src/lib.rs @@ -867,6 +867,13 @@ impl AstStructBinding { } impl AstStructFieldBinding { + pub fn spread(&self) -> Option { + self.syntax() + .children_with_tokens() + .filter_map(SyntaxElement::into_token) + .find(|token| token.kind() == T![...]) + } + pub fn name(&self) -> Option { self.syntax() .children_with_tokens() diff --git a/crates/rue-cli/Cargo.toml b/crates/rue-cli/Cargo.toml index 87716369..eecb1735 100644 --- a/crates/rue-cli/Cargo.toml +++ b/crates/rue-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-cli" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "A CLI tool for invoking the Rue compiler." diff --git a/crates/rue-cli/src/main.rs b/crates/rue-cli/src/main.rs index 32dd1bd5..b2b51be8 100644 --- a/crates/rue-cli/src/main.rs +++ b/crates/rue-cli/src/main.rs @@ -191,14 +191,13 @@ fn build(args: BuildArgs) -> Result<()> { }; if args.hex && args.hash { - eprintln!("{}", "Cannot use both `--hex` and `--hash`".red().bold()); - process::exit(1); - } - - if args.hex { + println!("{}", hex::encode(node_to_bytes(&allocator, program)?)); + println!(); + println!("{}", tree_hash(&allocator, program)); + } else if args.hex { println!("{}", hex::encode(node_to_bytes(&allocator, program)?)); } else if args.hash { - println!("0x{}", tree_hash(&allocator, program)); + println!("{}", tree_hash(&allocator, program)); } else { println!("{}", disassemble(&allocator, program, None)); } diff --git a/crates/rue-compiler/Cargo.toml b/crates/rue-compiler/Cargo.toml index 0e2e6c60..367d85bb 100644 --- a/crates/rue-compiler/Cargo.toml +++ b/crates/rue-compiler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-compiler" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "A compiler for the Rue programming language." diff --git a/crates/rue-compiler/src/compile/binding/struct_binding.rs b/crates/rue-compiler/src/compile/binding/struct_binding.rs index c5c6f950..a2e73350 100644 --- a/crates/rue-compiler/src/compile/binding/struct_binding.rs +++ b/crates/rue-compiler/src/compile/binding/struct_binding.rs @@ -21,11 +21,35 @@ pub fn create_struct_binding( let mut specified_fields = HashSet::new(); - for field in struct_binding.fields() { + let len = struct_binding.fields().count(); + + for (i, field) in struct_binding.fields().enumerate() { let Some(name) = field.name() else { continue; }; + if let Some(spread) = field.spread() { + if i != len - 1 { + ctx.diagnostic(&spread, DiagnosticKind::NonFinalSpread); + } + + let binding_symbol = ctx.alloc_symbol(Symbol::Binding(BindingSymbol { + name: None, + value: reference.clone(), + inline: true, + })); + + ctx.push_declaration(Declaration::Symbol(binding_symbol)); + + ctx.reference(Declaration::Symbol(symbol), None); + + create_binding_for_identifier(ctx, binding_symbol, &name); + + ctx.pop_declaration(); + + continue; + } + specified_fields.insert(name.text().to_string()); let value = match compile_field(ctx, reference.clone(), &Field::Named(name.text())) { diff --git a/crates/rue-diagnostic/Cargo.toml b/crates/rue-diagnostic/Cargo.toml index cd0e7fd1..31d7e232 100644 --- a/crates/rue-diagnostic/Cargo.toml +++ b/crates/rue-diagnostic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-diagnostic" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "All of the potential diagnostics that can be emitted by the Rue compiler." diff --git a/crates/rue-hir/Cargo.toml b/crates/rue-hir/Cargo.toml index 5dbbbfe3..c369ac96 100644 --- a/crates/rue-hir/Cargo.toml +++ b/crates/rue-hir/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-hir" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "Provides a high-level intermediate representation of the Rue programming language." diff --git a/crates/rue-lexer/Cargo.toml b/crates/rue-lexer/Cargo.toml index 8328804b..25c05a86 100644 --- a/crates/rue-lexer/Cargo.toml +++ b/crates/rue-lexer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-lexer" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "A lexer for the Rue programming language." diff --git a/crates/rue-lir/Cargo.toml b/crates/rue-lir/Cargo.toml index e6a3ac01..6f080546 100644 --- a/crates/rue-lir/Cargo.toml +++ b/crates/rue-lir/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-lir" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "Provides a low-level intermediate representation that compiles to CLVM." diff --git a/crates/rue-lir/src/optimize/ops.rs b/crates/rue-lir/src/optimize/ops.rs index b5e28e66..f1196133 100644 --- a/crates/rue-lir/src/optimize/ops.rs +++ b/crates/rue-lir/src/optimize/ops.rs @@ -9,7 +9,7 @@ use sha3::Keccak256; use crate::{ ClvmOp, Lir, LirId, atom_bigint, bigint_atom, first_path, optimize::{ArgList, opt_truthy}, - rest_path, + parent_path, rest_path, }; // There's no way to optimize an atom @@ -98,6 +98,16 @@ pub fn opt_cons(arena: &mut Arena, first: LirId, rest: LirId) -> LirId { return rest; } + if let Lir::Path(f_path) = arena[first].clone() + && let Lir::Path(r_path) = arena[rest].clone() + && let parent = parent_path(f_path) + && parent == parent_path(r_path) + && first_path(parent) == f_path + && rest_path(parent) == r_path + { + return arena.alloc(Lir::Path(parent)); + } + arena.alloc(Lir::Cons(first, rest)) } diff --git a/crates/rue-lir/src/path.rs b/crates/rue-lir/src/path.rs index 3ae46266..4f5dd385 100644 --- a/crates/rue-lir/src/path.rs +++ b/crates/rue-lir/src/path.rs @@ -28,6 +28,14 @@ fn add_path(a: u32, mut b: u32) -> u32 { b | (a & mask) } +pub fn parent_path(path: u32) -> u32 { + let result_depth = 31 - path.leading_zeros(); + let original_depth = result_depth - 1; + let mask = (1 << original_depth) - 1; + let lower_bits = path & mask; + (1 << original_depth) | lower_bits +} + #[cfg(test)] mod tests { use super::*; @@ -52,4 +60,27 @@ mod tests { assert_eq!(rest_path(2), 6); assert_eq!(rest_path(5), 13); } + + #[test] + fn test_parent_path() { + assert_eq!(parent_path(2), 1); + assert_eq!(parent_path(3), 1); + assert_eq!(parent_path(4), 2); + assert_eq!(parent_path(6), 2); + assert_eq!(parent_path(5), 3); + assert_eq!(parent_path(7), 3); + assert_eq!(parent_path(8), 4); + assert_eq!(parent_path(12), 4); + assert_eq!(parent_path(10), 6); + assert_eq!(parent_path(14), 6); + assert_eq!(parent_path(9), 5); + assert_eq!(parent_path(13), 5); + assert_eq!(parent_path(11), 7); + assert_eq!(parent_path(15), 7); + + for path in 1..u32::from(u16::MAX) { + assert_eq!(parent_path(first_path(path)), path); + assert_eq!(parent_path(rest_path(path)), path); + } + } } diff --git a/crates/rue-lsp/Cargo.toml b/crates/rue-lsp/Cargo.toml index f4b783bc..6bcd57fe 100644 --- a/crates/rue-lsp/Cargo.toml +++ b/crates/rue-lsp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-lsp" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "A language server protocol (LSP) implementation for the Rue programming language." diff --git a/crates/rue-options/Cargo.toml b/crates/rue-options/Cargo.toml index 33b14827..c2ef4bb1 100644 --- a/crates/rue-options/Cargo.toml +++ b/crates/rue-options/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-options" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "Provides a way to configure the Rue compiler." diff --git a/crates/rue-parser/Cargo.toml b/crates/rue-parser/Cargo.toml index d68a1e09..3d6b9ee0 100644 --- a/crates/rue-parser/Cargo.toml +++ b/crates/rue-parser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-parser" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "A parser for the Rue programming language." diff --git a/crates/rue-parser/src/grammar/binding.rs b/crates/rue-parser/src/grammar/binding.rs index e36991fc..66cfa54f 100644 --- a/crates/rue-parser/src/grammar/binding.rs +++ b/crates/rue-parser/src/grammar/binding.rs @@ -33,8 +33,9 @@ pub fn binding(p: &mut Parser) { p.expect(T!['{']); while !p.at(T!['}']) { p.start(SyntaxKind::StructFieldBinding); + let spread = p.try_eat(T![...]); p.expect(SyntaxKind::Ident); - if p.try_eat(T![:]) { + if p.try_eat(T![:]) && !spread { binding(p); } p.finish(); diff --git a/crates/rue-tests/Cargo.toml b/crates/rue-tests/Cargo.toml index 38fc72d7..1d6ae1fd 100644 --- a/crates/rue-tests/Cargo.toml +++ b/crates/rue-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-tests" -version = "0.7.1" +version = "0.8.0" edition = "2024" publish = false license = "Apache-2.0" diff --git a/crates/rue-types/Cargo.toml b/crates/rue-types/Cargo.toml index c4153a04..0dadf77f 100644 --- a/crates/rue-types/Cargo.toml +++ b/crates/rue-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-types" -version = "0.7.1" +version = "0.8.0" edition = "2024" license = "Apache-2.0" description = "A type system for the Rue programming language." diff --git a/examples/brainfck.yaml b/examples/brainfck.yaml index 3e7f3238..6dda2fc8 100644 --- a/examples/brainfck.yaml +++ b/examples/brainfck.yaml @@ -1,19 +1,19 @@ tests: - name: abc - program: (a (q 5 (r (r (f (a 12 (c (c 8 (c 12 (c 22 30))) (c (c (c () (c () (c () ()))) (c () (c () ()))) (c (concat (a 10 (c 10 (c (q . 43) (q . 65)))) (q . ".+.+.")) ())))))))) (c (c (c (q 2 (i 7 (q 2 (q 16 (a (i (= 6 (q . 91)) (q 2 5 (c 5 (c (+ 11 (q . 1)) 4))) (q 2 (i (= 6 (q . 93)) (q 2 (i (= 11 (q . 1)) (q) (q 2 5 (c 5 (c (- 11 (q . 1)) 4)))) 1) (q 2 5 (c 5 (c 11 4)))) 1)) 1) (q . 1)) (c (c (substr 7 (q . 1)) (substr 7 () (q . 1))) 1)) (q)) 1) (q 2 (i 11 (q 2 10 (c (c 4 (c 10 (c 22 30))) (a 30 (c (c 4 (c 10 (c 22 30))) 3)))) (q . 3)) 1)) (c (q 2 (i (> 7 ()) (q 14 5 (a 2 (c 2 (c 5 (- 7 (q . 1)))))) (q)) 1) (c (q 2 (i 17 (q 2 22 (c (c 4 (c 10 (c 22 30))) (c (f (a 10 (c (c 4 (c 10 (c 22 30))) (c 5 (c 7 ()))))) 7))) (q . 5)) 1) (q 2 (q 2 (i (= 6 (q . 43)) (q 4 (c (c (+ 35 (q . 1)) (c 83 (c -77 ()))) (c 43 (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 45)) (q 4 (c (c (- 35 (q . 1)) (c 83 (c -77 ()))) (c 43 (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 60)) (q 4 (a (i 83 (q 4 (c -109 (c -45 (c (c 35 -77) ()))) (c 43 (c 91 ()))) (q 4 (c () (c () (c (c 35 -77) ()))) (c 43 (c 91 ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 62)) (q 4 (a (i -77 (q 4 (c 307 (c (c 35 83) (c 435 ()))) (c 43 (c 91 ()))) (q 4 (c () (c (c 35 83) (c () ()))) (c 43 (c 91 ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 44)) (q 4 (c (c (substr 43 () (q . 1)) (c 83 (c -77 ()))) (c (substr 43 (q . 1)) (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 46)) (q 4 (c 19 (c 43 (c (concat 91 35) ()))) (c 4 ())) (q 2 (i (= 6 (q . 91)) (q 2 (q 4 (a 91 (c (c 19 (c 43 (c 91 123))) (c 23 (substr 9 () 2)))) (c (substr 9 2) ())) (c (a 9 (c 9 (c (q . 1) 4))) 1)) (q 4 11 (c 4 ()))) 1)) 1)) 1)) 1)) 1)) 1)) 1) (c (c (substr 11 (q . 1)) (substr 11 () (q . 1))) 1))))) ())) + program: (a (q 5 (r (r (f (a 12 (c (c 8 (c 12 14)) (c (c (c () (c () (c () ()))) (c () (c () ()))) (c (concat (a 10 (c 10 (c (q . 43) (q . 65)))) (q . ".+.+.")) ())))))))) (c (c (c (q 2 (i 7 (q 2 (q 16 (a (i (= 6 (q . 91)) (q 2 5 (c 5 (c (+ 11 (q . 1)) 4))) (q 2 (i (= 6 (q . 93)) (q 2 (i (= 11 (q . 1)) (q) (q 2 5 (c 5 (c (- 11 (q . 1)) 4)))) 1) (q 2 5 (c 5 (c 11 4)))) 1)) 1) (q . 1)) (c (c (substr 7 (q . 1)) (substr 7 () (q . 1))) 1)) (q)) 1) (q 2 (i 11 (q 2 10 (c 2 (a 30 1))) (q . 3)) 1)) (c (q 2 (i (> 7 ()) (q 14 5 (a 2 (c 2 (c 5 (- 7 (q . 1)))))) (q)) 1) (c (q 2 (i 17 (q 2 22 (c 2 (c (f (a 10 (c 2 (c 5 (c 7 ()))))) 7))) (q . 5)) 1) (q 2 (q 2 (i (= 6 (q . 43)) (q 4 (c (c (+ 35 (q . 1)) (c 83 (c -77 ()))) (c 43 (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 45)) (q 4 (c (c (- 35 (q . 1)) (c 83 (c -77 ()))) (c 43 (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 60)) (q 4 (a (i 83 (q 4 (c -109 (c -45 (c (c 35 -77) ()))) (c 43 (c 91 ()))) (q 4 (c () (c () (c (c 35 -77) ()))) (c 43 (c 91 ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 62)) (q 4 (a (i -77 (q 4 (c 307 (c (c 35 83) (c 435 ()))) (c 43 (c 91 ()))) (q 4 (c () (c (c 35 83) (c () ()))) (c 43 (c 91 ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 44)) (q 4 (c (c (substr 43 () (q . 1)) (c 83 (c -77 ()))) (c (substr 43 (q . 1)) (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 46)) (q 4 (c 19 (c 43 (c (concat 91 35) ()))) (c 4 ())) (q 2 (i (= 6 (q . 91)) (q 2 (q 4 (a 91 (c 11 (c 23 (substr 9 () 2)))) (c (substr 9 2) ())) (c (a 9 (c 9 (c (q . 1) 4))) 1)) (q 4 11 (c 4 ()))) 1)) 1)) 1)) 1)) 1)) 1)) 1) (c (c (substr 11 (q . 1)) (substr 11 () (q . 1))) 1))))) ())) debug_program: (a (q 2 (q 2 (q 2 (i ("debug_print" (q . "brainfck.rue:207:5") (concat (concat (concat (concat (concat (concat (q . "run(`") (concat (a 43 (c 43 (c (q . 43) (q . 65)))) (q . ".+.+."))) (q . "`, `")) ()) (q . "`) = `")) 2) (q . 96))) (q) (q . 2)) 1) (c (f (r (r (f (a 25 (c (c 17 (c 25 (c 45 61))) 2)))))) 1)) (c (c (c (c () (c () (c () ()))) (c () (c () ()))) (c (concat (a 10 (c 10 (c (q . 43) (q . 65)))) (q . ".+.+.")) ())) 1)) (c (c (c (q 2 (i (= 7 ()) (q) (q 2 (q 16 (q . 1) (a (i (= 6 (q . 91)) (q 2 5 (c 5 (c (+ 11 (q . 1)) 4))) (q 2 (i (= 6 (q . 93)) (q 2 (i (= 11 (q . 1)) (q) (q 2 5 (c 5 (c (- 11 (q . 1)) 4)))) 1) (q 2 5 (c 5 (c 11 4)))) 1)) 1)) (c (c (substr 7 (q . 1)) (substr 7 () (q . 1))) 1))) 1) (q 2 (i (= (f (r 3)) ()) (q . 3) (q 2 10 (c (c 4 (c 10 (c 22 30))) (a 30 (c (c 4 (c 10 (c 22 30))) 3))))) 1)) (c (q 2 (i (> 7 ()) (q 14 5 (a 2 (c 2 (c 5 (- 7 (q . 1)))))) (q)) 1) (c (q 2 (i (= (f (f 5)) ()) (q . 5) (q 2 22 (c (c 4 (c 10 (c 22 30))) (c (f (a 10 (c (c 4 (c 10 (c 22 30))) (c 5 (c 7 ()))))) 7)))) 1) (q 2 (q 2 (i (= 6 (q . 43)) (q 4 (c (c (+ (f (f (f 7))) (q . 1)) (c (f (r (f (f 7)))) (c (f (r (r (f (f 7))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ()))) (c 4 ())) (q 2 (i (= 6 (q . 45)) (q 4 (c (c (- (f (f (f 7))) (q . 1)) (c (f (r (f (f 7)))) (c (f (r (r (f (f 7))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ()))) (c 4 ())) (q 2 (i (= 6 (q . 60)) (q 4 (a (i (not (l (f (r (f (f 7)))))) (q 4 (c () (c () (c (c (f (f (f 7))) (f (r (r (f (f 7)))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ()))) (q 4 (c (f (f (r (f (f 7))))) (c (r (f (r (f (f 7))))) (c (c (f (f (f 7))) (f (r (r (f (f 7)))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 62)) (q 4 (a (i (not (l (f (r (r (f (f 7))))))) (q 4 (c () (c (c (f (f (f 7))) (f (r (f (f 7))))) (c () ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ()))) (q 4 (c (f (f (r (r (f (f 7)))))) (c (c (f (f (f 7))) (f (r (f (f 7))))) (c (r (f (r (r (f (f 7)))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 44)) (q 4 (c (c (substr (f (r (f 7))) () (q . 1)) (c (f (r (f (f 7)))) (c (f (r (r (f (f 7))))) ()))) (c (substr (f (r (f 7))) (q . 1)) (c (f (r (r (f 7)))) ()))) (c 4 ())) (q 2 (i (= 6 (q . 46)) (q 4 (c (f (f 7)) (c (f (r (f 7))) (c (concat (f (r (r (f 7)))) (f (f (f 7)))) ()))) (c 4 ())) (q 2 (i (= 6 (q . 91)) (q 2 (q 2 (q 4 (a -73 (c (c 39 (c 87 (c -73 -9))) (c (f 31) 4))) (c 6 ())) (c (c (substr 9 () 2) (substr 9 2)) 1)) (c (a 9 (c 9 (c (q . 1) 4))) 1)) (q 4 (f 7) (c 4 ()))) 1)) 1)) 1)) 1)) 1)) 1)) 1) (c (c (substr (f (r 3)) (q . 1)) (substr (f (r 3)) () (q . 1))) 1))))) ())) output: '"ABC"' - runtime_cost: 478061 - byte_cost: 16872000 - total_cost: 17350061 + runtime_cost: 424116 + byte_cost: 15648000 + total_cost: 16072116 print_messages: - '"run(`+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+.+.`, ``) = `ABC`"' - name: alphabet - program: (a (q 5 (r (r (f (a 10 (c (c 8 (c 10 (c 22 30))) (c (c (c () (c () (c () ()))) (c () (c () ()))) (c (concat (q . 62) (a 12 (c 12 (c (q . 43) (q . 65)))) (q . 60) (a 12 (c 12 (c (q . 43) (q . 26)))) (q . "[->.+<]")) ())))))))) (c (c (c (q 2 (i 7 (q 2 (q 16 (a (i (= 6 (q . 91)) (q 2 5 (c 5 (c (+ 11 (q . 1)) 4))) (q 2 (i (= 6 (q . 93)) (q 2 (i (= 11 (q . 1)) (q) (q 2 5 (c 5 (c (- 11 (q . 1)) 4)))) 1) (q 2 5 (c 5 (c 11 4)))) 1)) 1) (q . 1)) (c (c (substr 7 (q . 1)) (substr 7 () (q . 1))) 1)) (q)) 1) (q 2 (i (> 7 ()) (q 14 5 (a 2 (c 2 (c 5 (- 7 (q . 1)))))) (q)) 1)) (c (q 2 (i 11 (q 2 10 (c (c 4 (c 10 (c 22 30))) (a 30 (c (c 4 (c 10 (c 22 30))) 3)))) (q . 3)) 1) (c (q 2 (i 17 (q 2 22 (c (c 4 (c 10 (c 22 30))) (c (f (a 10 (c (c 4 (c 10 (c 22 30))) (c 5 (c 7 ()))))) 7))) (q . 5)) 1) (q 2 (q 2 (i (= 6 (q . 43)) (q 4 (c (c (+ 35 (q . 1)) (c 83 (c -77 ()))) (c 43 (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 45)) (q 4 (c (c (- 35 (q . 1)) (c 83 (c -77 ()))) (c 43 (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 60)) (q 4 (a (i 83 (q 4 (c -109 (c -45 (c (c 35 -77) ()))) (c 43 (c 91 ()))) (q 4 (c () (c () (c (c 35 -77) ()))) (c 43 (c 91 ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 62)) (q 4 (a (i -77 (q 4 (c 307 (c (c 35 83) (c 435 ()))) (c 43 (c 91 ()))) (q 4 (c () (c (c 35 83) (c () ()))) (c 43 (c 91 ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 44)) (q 4 (c (c (substr 43 () (q . 1)) (c 83 (c -77 ()))) (c (substr 43 (q . 1)) (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 46)) (q 4 (c 19 (c 43 (c (concat 91 35) ()))) (c 4 ())) (q 2 (i (= 6 (q . 91)) (q 2 (q 4 (a 91 (c (c 19 (c 43 (c 91 123))) (c 23 (substr 9 () 2)))) (c (substr 9 2) ())) (c (a 9 (c 9 (c (q . 1) 4))) 1)) (q 4 11 (c 4 ()))) 1)) 1)) 1)) 1)) 1)) 1)) 1) (c (c (substr 11 (q . 1)) (substr 11 () (q . 1))) 1))))) ())) + program: (a (q 5 (r (r (f (a 10 (c (c 8 6) (c (c (c () (c () (c () ()))) (c () (c () ()))) (c (concat (q . 62) (a 12 (c 12 (c (q . 43) (q . 65)))) (q . 60) (a 12 (c 12 (c (q . 43) (q . 26)))) (q . "[->.+<]")) ())))))))) (c (c (c (q 2 (i 7 (q 2 (q 16 (a (i (= 6 (q . 91)) (q 2 5 (c 5 (c (+ 11 (q . 1)) 4))) (q 2 (i (= 6 (q . 93)) (q 2 (i (= 11 (q . 1)) (q) (q 2 5 (c 5 (c (- 11 (q . 1)) 4)))) 1) (q 2 5 (c 5 (c 11 4)))) 1)) 1) (q . 1)) (c (c (substr 7 (q . 1)) (substr 7 () (q . 1))) 1)) (q)) 1) (q 2 (i (> 7 ()) (q 14 5 (a 2 (c 2 (c 5 (- 7 (q . 1)))))) (q)) 1)) (c (q 2 (i 11 (q 2 10 (c 2 (a 30 1))) (q . 3)) 1) (c (q 2 (i 17 (q 2 22 (c 2 (c (f (a 10 (c 2 (c 5 (c 7 ()))))) 7))) (q . 5)) 1) (q 2 (q 2 (i (= 6 (q . 43)) (q 4 (c (c (+ 35 (q . 1)) (c 83 (c -77 ()))) (c 43 (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 45)) (q 4 (c (c (- 35 (q . 1)) (c 83 (c -77 ()))) (c 43 (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 60)) (q 4 (a (i 83 (q 4 (c -109 (c -45 (c (c 35 -77) ()))) (c 43 (c 91 ()))) (q 4 (c () (c () (c (c 35 -77) ()))) (c 43 (c 91 ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 62)) (q 4 (a (i -77 (q 4 (c 307 (c (c 35 83) (c 435 ()))) (c 43 (c 91 ()))) (q 4 (c () (c (c 35 83) (c () ()))) (c 43 (c 91 ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 44)) (q 4 (c (c (substr 43 () (q . 1)) (c 83 (c -77 ()))) (c (substr 43 (q . 1)) (c 91 ()))) (c 4 ())) (q 2 (i (= 6 (q . 46)) (q 4 (c 19 (c 43 (c (concat 91 35) ()))) (c 4 ())) (q 2 (i (= 6 (q . 91)) (q 2 (q 4 (a 91 (c 11 (c 23 (substr 9 () 2)))) (c (substr 9 2) ())) (c (a 9 (c 9 (c (q . 1) 4))) 1)) (q 4 11 (c 4 ()))) 1)) 1)) 1)) 1)) 1)) 1)) 1) (c (c (substr 11 (q . 1)) (substr 11 () (q . 1))) 1))))) ())) debug_program: (a (q 2 (q 2 (q 2 (i ("debug_print" (q . "brainfck.rue:207:5") (concat (concat (concat (concat (concat (concat (q . "run(`") (concat (concat (concat (concat (q . 62) (a 51 (c 51 (c (q . 43) (q . 65))))) (q . 60)) (a 51 (c 51 (c (q . 43) (q . 26))))) (q . "[->.+<]"))) (q . "`, `")) ()) (q . "`) = `")) 2) (q . 96))) (q) (q . 2)) 1) (c (f (r (r (f (a 21 (c (c 17 (c 21 (c 45 61))) 2)))))) 1)) (c (c (c (c () (c () (c () ()))) (c () (c () ()))) (c (concat (concat (concat (concat (q . 62) (a 12 (c 12 (c (q . 43) (q . 65))))) (q . 60)) (a 12 (c 12 (c (q . 43) (q . 26))))) (q . "[->.+<]")) ())) 1)) (c (c (c (q 2 (i (= 7 ()) (q) (q 2 (q 16 (q . 1) (a (i (= 6 (q . 91)) (q 2 5 (c 5 (c (+ 11 (q . 1)) 4))) (q 2 (i (= 6 (q . 93)) (q 2 (i (= 11 (q . 1)) (q) (q 2 5 (c 5 (c (- 11 (q . 1)) 4)))) 1) (q 2 5 (c 5 (c 11 4)))) 1)) 1)) (c (c (substr 7 (q . 1)) (substr 7 () (q . 1))) 1))) 1) (q 2 (i (> 7 ()) (q 14 5 (a 2 (c 2 (c 5 (- 7 (q . 1)))))) (q)) 1)) (c (q 2 (i (= (f (r 3)) ()) (q . 3) (q 2 10 (c (c 4 (c 10 (c 22 30))) (a 30 (c (c 4 (c 10 (c 22 30))) 3))))) 1) (c (q 2 (i (= (f (f 5)) ()) (q . 5) (q 2 22 (c (c 4 (c 10 (c 22 30))) (c (f (a 10 (c (c 4 (c 10 (c 22 30))) (c 5 (c 7 ()))))) 7)))) 1) (q 2 (q 2 (i (= 6 (q . 43)) (q 4 (c (c (+ (f (f (f 7))) (q . 1)) (c (f (r (f (f 7)))) (c (f (r (r (f (f 7))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ()))) (c 4 ())) (q 2 (i (= 6 (q . 45)) (q 4 (c (c (- (f (f (f 7))) (q . 1)) (c (f (r (f (f 7)))) (c (f (r (r (f (f 7))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ()))) (c 4 ())) (q 2 (i (= 6 (q . 60)) (q 4 (a (i (not (l (f (r (f (f 7)))))) (q 4 (c () (c () (c (c (f (f (f 7))) (f (r (r (f (f 7)))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ()))) (q 4 (c (f (f (r (f (f 7))))) (c (r (f (r (f (f 7))))) (c (c (f (f (f 7))) (f (r (r (f (f 7)))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 62)) (q 4 (a (i (not (l (f (r (r (f (f 7))))))) (q 4 (c () (c (c (f (f (f 7))) (f (r (f (f 7))))) (c () ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ()))) (q 4 (c (f (f (r (r (f (f 7)))))) (c (c (f (f (f 7))) (f (r (f (f 7))))) (c (r (f (r (r (f (f 7)))))) ()))) (c (f (r (f 7))) (c (f (r (r (f 7)))) ())))) 1) (c 4 ())) (q 2 (i (= 6 (q . 44)) (q 4 (c (c (substr (f (r (f 7))) () (q . 1)) (c (f (r (f (f 7)))) (c (f (r (r (f (f 7))))) ()))) (c (substr (f (r (f 7))) (q . 1)) (c (f (r (r (f 7)))) ()))) (c 4 ())) (q 2 (i (= 6 (q . 46)) (q 4 (c (f (f 7)) (c (f (r (f 7))) (c (concat (f (r (r (f 7)))) (f (f (f 7)))) ()))) (c 4 ())) (q 2 (i (= 6 (q . 91)) (q 2 (q 2 (q 4 (a -73 (c (c 39 (c 87 (c -73 -9))) (c (f 31) 4))) (c 6 ())) (c (c (substr 9 () 2) (substr 9 2)) 1)) (c (a 9 (c 9 (c (q . 1) 4))) 1)) (q 4 (f 7) (c 4 ()))) 1)) 1)) 1)) 1)) 1)) 1)) 1) (c (c (substr (f (r 3)) (q . 1)) (substr (f (r 3)) () (q . 1))) 1))))) ())) output: '"ABCDEFGHIJKLMNOPQRSTUVWXYZ"' - runtime_cost: 1454359 - byte_cost: 17280000 - total_cost: 18734359 + runtime_cost: 1244210 + byte_cost: 15984000 + total_cost: 17228210 print_messages: - '"run(`>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<++++++++++++++++++++++++++[->.+<]`, ``) = `ABCDEFGHIJKLMNOPQRSTUVWXYZ`"' diff --git a/examples/fizz_buzz.yaml b/examples/fizz_buzz.yaml index 66454a09..0eb8c080 100644 --- a/examples/fizz_buzz.yaml +++ b/examples/fizz_buzz.yaml @@ -1,15 +1,15 @@ -program: (a (q 2 10 (c (c 4 (c 10 (c 22 30))) (c (q . 1) 5))) (c (c (q 2 (i (> () 3) (q 14 (q . 45) (a 4 (c (c 4 6) (- () 3)))) (q 2 (i (> (q . 10) 3) (q 2 6 3) (q 14 (a 4 (c (c 4 6) (/ 3 (q . 10)))) (a 6 (% 3 (q . 10))))) 1)) 1) (c (q 4 (a 30 (c (c 4 22) 5)) (a (i (= 5 7) (q) (q 2 10 (c (c 4 (c 10 (c 22 30))) (c (+ 5 (q . 1)) 7)))) 1)) (c (q 16 1 (q . 48)) (q 2 (i (a (i (% 3 (q . 3)) (q) (q 2 (i (% 3 (q . 5)) (q) (q 1 . 1)) 1)) 1) (q 1 . "FizzBuzz") (q 2 (i (% 3 (q . 3)) (q 2 (i (% 3 (q . 5)) (q 2 4 (c (c 4 6) 3)) (q 1 . "Buzz")) 1) (q 1 . "Fizz")) 1)) 1)))) 1)) +program: (a (q 2 10 (c 2 (c (q . 1) 5))) (c (c (q 2 (i (> () 3) (q 14 (q . 45) (a 4 (c 2 (- () 3)))) (q 2 (i (> (q . 10) 3) (q 2 6 3) (q 14 (a 4 (c 2 (/ 3 (q . 10)))) (a 6 (% 3 (q . 10))))) 1)) 1) (c (q 4 (a 30 (c (c 4 22) 5)) (a (i (= 5 7) (q) (q 2 10 (c 2 (c (+ 5 (q . 1)) 7)))) 1)) (c (q 16 1 (q . 48)) (q 2 (i (a (i (% 3 (q . 3)) (q) (q 2 (i (% 3 (q . 5)) (q) (q 1 . 1)) 1)) 1) (q 1 . "FizzBuzz") (q 2 (i (% 3 (q . 3)) (q 2 (i (% 3 (q . 5)) (q 2 4 1) (q 1 . "Buzz")) 1) (q 1 . "Fizz")) 1)) 1)))) 1)) debug_program: (a (q 2 10 (c (c 4 (c 10 (c 22 30))) (c (q . 1) 5))) (c (c (q 2 (i (> () 3) (q 14 (q . 45) (a 4 (c (c 4 6) (- () 3)))) (q 2 (i (> (q . 10) 3) (q 2 6 3) (q 14 (a 4 (c (c 4 6) (/ 3 (q . 10)))) (a 6 (% 3 (q . 10))))) 1)) 1) (c (q 2 (q 4 (a 61 (c (c 9 45) 11)) 2) (c (a (i (= 5 7) (q) (q 2 10 (c (c 4 (c 10 (c 22 30))) (c (+ 5 (q . 1)) 7)))) 1) 1)) (c (q 16 (q . 48) 1) (q 2 (i (a (i (= (% 3 (q . 3)) ()) (q 2 (i (= (% 3 (q . 5)) ()) (q 1 . 1) (q)) 1) (q)) 1) (q 1 . "FizzBuzz") (q 2 (i (= (% 3 (q . 3)) ()) (q 1 . "Fizz") (q 2 (i (= (% 3 (q . 5)) ()) (q 1 . "Buzz") (q 2 4 (c (c 4 6) 3))) 1)) 1)) 1)))) 1)) solution: (15) output: (g1_subtract 50 "Fizz" 52 "Buzz" "Fizz" 55 56 "Fizz" "Buzz" 12593 "Fizz" 12595 12596 "FizzBuzz") -runtime_cost: 136496 -byte_cost: 5724000 -total_cost: 5860496 +runtime_cost: 129500 +byte_cost: 5004000 +total_cost: 5133500 tests: - name: tests - program: (a (q 2 (i (= (a 4 (c 4 (a 10 (c (c 10 (c 22 (c 46 62))) (c (q . 1) (q . 1)))))) (a 4 (c 4 (c (q . 49) ())))) (q 2 (i (= (a 4 (c 4 (a 10 (c (c 10 (c 22 (c 46 62))) (c (q . 1) (q . 5)))))) (a 4 (c 4 (c (q . 49) (c (q . 50) (c (q . "Fizz") (c (q . 52) (c (q . "Buzz") ())))))))) (q 2 (i (= (a 4 (c 4 (a 10 (c (c 10 (c 22 (c 46 62))) (c (q . 1) (q . 15)))))) (a 4 (c 4 (c (q . 49) (c (q . 50) (c (q . "Fizz") (c (q . 52) (c (q . "Buzz") (c (q . "Fizz") (c (q . 55) (c (q . 56) (c (q . "Fizz") (c (q . "Buzz") (c (q . 12593) (c (q . "Fizz") (c (q . 12595) (c (q . 12596) (c (q . "FizzBuzz") ())))))))))))))))))) (q) (q 8)) 1) (q 8)) 1) (q 8)) 1) (c (c (q 2 (i (l 3) (q 11 (q . 2) (a 2 (c 2 5)) (a 2 (c 2 7))) (q 11 (q . 1) 3)) 1) (c (q 4 (a 30 (c (c 10 22) 5)) (a (i (= 5 7) (q) (q 2 4 (c (c 4 (c 10 (c 22 30))) (c (+ 5 (q . 1)) 7)))) 1)) (c (q 2 (i (> () 3) (q 14 (q . 45) (a 4 (c (c 4 6) (- () 3)))) (q 2 (i (> (q . 10) 3) (q 2 6 3) (q 14 (a 4 (c (c 4 6) (/ 3 (q . 10)))) (a 6 (% 3 (q . 10))))) 1)) 1) (c (q 16 1 (q . 48)) (q 2 (i (a (i (% 3 (q . 3)) (q) (q 2 (i (% 3 (q . 5)) (q) (q 1 . 1)) 1)) 1) (q 1 . "FizzBuzz") (q 2 (i (% 3 (q . 3)) (q 2 (i (% 3 (q . 5)) (q 2 4 (c (c 4 6) 3)) (q 1 . "Buzz")) 1) (q 1 . "Fizz")) 1)) 1))))) ())) + program: (a (q 2 (i (= (a 4 (c 4 (a 10 (c 6 (c (q . 1) (q . 1)))))) (a 4 (c 4 (c (q . 49) ())))) (q 2 (i (= (a 4 (c 4 (a 10 (c 6 (c (q . 1) (q . 5)))))) (a 4 (c 4 (c (q . 49) (c (q . 50) (c (q . "Fizz") (c (q . 52) (c (q . "Buzz") ())))))))) (q 2 (i (= (a 4 (c 4 (a 10 (c 6 (c (q . 1) (q . 15)))))) (a 4 (c 4 (c (q . 49) (c (q . 50) (c (q . "Fizz") (c (q . 52) (c (q . "Buzz") (c (q . "Fizz") (c (q . 55) (c (q . 56) (c (q . "Fizz") (c (q . "Buzz") (c (q . 12593) (c (q . "Fizz") (c (q . 12595) (c (q . 12596) (c (q . "FizzBuzz") ())))))))))))))))))) (q) (q 8)) 1) (q 8)) 1) (q 8)) 1) (c (c (q 2 (i (l 3) (q 11 (q . 2) (a 2 (c 2 5)) (a 2 (c 2 7))) (q 11 (q . 1) 3)) 1) (c (q 4 (a 30 (c (c 10 22) 5)) (a (i (= 5 7) (q) (q 2 4 (c 2 (c (+ 5 (q . 1)) 7)))) 1)) (c (q 2 (i (> () 3) (q 14 (q . 45) (a 4 (c 2 (- () 3)))) (q 2 (i (> (q . 10) 3) (q 2 6 3) (q 14 (a 4 (c 2 (/ 3 (q . 10)))) (a 6 (% 3 (q . 10))))) 1)) 1) (c (q 16 1 (q . 48)) (q 2 (i (a (i (% 3 (q . 3)) (q) (q 2 (i (% 3 (q . 5)) (q) (q 1 . 1)) 1)) 1) (q 1 . "FizzBuzz") (q 2 (i (% 3 (q . 3)) (q 2 (i (% 3 (q . 5)) (q 2 4 1) (q 1 . "Buzz")) 1) (q 1 . "Fizz")) 1)) 1))))) ())) debug_program: (a (q 2 (i (= (a 4 (c 4 (a 10 (c (c 10 (c 22 (c 46 62))) (c (q . 1) (q . 1)))))) (a 4 (c 4 (c (q . 49) ())))) (q 2 (i (= (a 4 (c 4 (a 10 (c (c 10 (c 22 (c 46 62))) (c (q . 1) (q . 5)))))) (a 4 (c 4 (c (q . 49) (c (q . 50) (c (q . "Fizz") (c (q . 52) (c (q . "Buzz") ())))))))) (q 2 (i (= (a 4 (c 4 (a 10 (c (c 10 (c 22 (c 46 62))) (c (q . 1) (q . 15)))))) (a 4 (c 4 (c (q . 49) (c (q . 50) (c (q . "Fizz") (c (q . 52) (c (q . "Buzz") (c (q . "Fizz") (c (q . 55) (c (q . 56) (c (q . "Fizz") (c (q . "Buzz") (c (q . 12593) (c (q . "Fizz") (c (q . 12595) (c (q . 12596) (c (q . "FizzBuzz") ())))))))))))))))))) (q) (q 8 (q . "assertion failed at fizz_buzz.rue:43:5"))) 1) (q 8 (q . "assertion failed at fizz_buzz.rue:42:5"))) 1) (q 8 (q . "assertion failed at fizz_buzz.rue:41:5"))) 1) (c (c (q 2 (i (not (l 3)) (q 11 (concat (q . 1) 3)) (q 11 (concat (concat (q . 2) (a 2 (c 2 (f 3)))) (a 2 (c 2 (r 3)))))) 1) (c (q 2 (q 4 (a 61 (c (c 21 45) 11)) 2) (c (a (i (= 5 7) (q) (q 2 4 (c (c 4 (c 10 (c 22 30))) (c (+ 5 (q . 1)) 7)))) 1) 1)) (c (q 2 (i (> () 3) (q 14 (q . 45) (a 4 (c (c 4 6) (- () 3)))) (q 2 (i (> (q . 10) 3) (q 2 6 3) (q 14 (a 4 (c (c 4 6) (/ 3 (q . 10)))) (a 6 (% 3 (q . 10))))) 1)) 1) (c (q 16 (q . 48) 1) (q 2 (i (a (i (= (% 3 (q . 3)) ()) (q 2 (i (= (% 3 (q . 5)) ()) (q 1 . 1) (q)) 1) (q)) 1) (q 1 . "FizzBuzz") (q 2 (i (= (% 3 (q . 3)) ()) (q 1 . "Fizz") (q 2 (i (= (% 3 (q . 5)) ()) (q 1 . "Buzz") (q 2 4 (c (c 4 6) 3))) 1)) 1)) 1))))) ())) output: () - runtime_cost: 316023 - byte_cost: 11940000 - total_cost: 12256023 + runtime_cost: 306153 + byte_cost: 10788000 + total_cost: 11094153 diff --git a/examples/puzzles/cat.yaml b/examples/puzzles/cat.yaml index de28300c..d7e7ce33 100644 --- a/examples/puzzles/cat.yaml +++ b/examples/puzzles/cat.yaml @@ -1,7 +1,7 @@ -program: (a (q 2 (q 2 (q 2 (q 4 (c (q . 70) (c 27 ())) (a (i 57 (q 2 (i (= (a 39 (c 39 89)) 95) (q 2 -9 (c -9 (c (a 89 (c (c (c (a 39 (c 39 -65)) 19) (c 27 3071)) (c 13 (c 767 (c 24575 (c 2 (c -71 ()))))))) 2))) (q 8)) 1) (q 2 (i (a (i 13 (q 2 (i 24575 (q) (q 1 . 1)) 1) (q)) 1) (q . 2) (q 8)) 1)) 1)) (c (c (c (q . 60) (c (concat (q . -53) (a 19 (c 19 (c 767 (c 6143 ()))))) ())) (c (c (q . 61) (c (sha256 (coinid 5119 (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 17) (sha256 (q . 2) (a 91 (c 91 (c 41 (c (sha256 (q . 1) 89) (c 11263 ()))))) (sha256 (q . 1))))) 23551) (q . -53) (a 19 (c 19 (c 13 (c (+ 6143 (- 11775 20) 12287) ()))))) ())) 8)) 1)) (c (c (a 21 (c (c 21 45) (c (a 47 95) (c 4 ())))) (a (i -65 (q 2 (i (= 1279 (coinid 319 (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 8) (sha256 (q . 2) (a 45 (c 45 (c 20 (c (sha256 (q . 1) 44) (c 703 ()))))) (sha256 (q . 1))))) 1471)) (q 1 . 1) (q)) 1) (q)) 1)) 1)) (c (c (c 5 (c (sha256 (q . 1) 5) (c 11 ()))) (coinid 639 1407 2943)) 1)) (c (c (q 2 (i (l 3) (q 11 (q . 2) (a 2 (c 2 5)) (a 2 (c 2 7))) (q 11 (q . 1) 3)) 1) (c (q 2 (i 5 (q 2 (i (a (i (= 17 (q . 51)) (q 2 (i 41 (q) (q 1 . 1)) 1) (q)) 1) (q 2 (q 4 4 (c 10 14)) (c (a 4 (c (c 4 6) (c 13 (c 11 (c -71 (c 377 ())))))) 1)) (q 2 (q 4 (c 10 8) (c (+ 20 14) 28)) (c (c (a 4 (c (c 4 6) (c 13 (c 11 15)))) (a (i (= 17 (q . 51)) (q 4 (c (q . 51) (c (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 19) (sha256 (q . 2) (a 6 (c 6 (c 43 (c (sha256 (q . 1) 91) (c 41 ()))))) (sha256 (q . 1))))) (c 89 121))) 89) (q 2 (i (a (i (a (i (= 17 (q . 60)) (q 2 (i (= (strlen 41) (q . 33)) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (i (= (substr 41 () (q . 1)) (q . -53)) (q 1 . 1) (q)) 1) (q)) 1) (q 8) (q 4 9 ())) 1)) 1)) 1))) 1) (q 4 () (c () 15))) 1) (c (q 2 (i 3 (q 11 (q . 2) (sha256 (q . 260)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 5) (sha256 (q . 2) (a 2 (c 2 7)) (sha256 (q . 1))))) (q 11 (q . 257))) 1) (q 2 (i 5 (q 4 9 (a 2 (c 2 (c 13 7)))) (q . 7)) 1)))) 1)) +program: (a (q 2 (q 2 (q 2 (q 4 (c (q . 70) (c 27 ())) (a (i 57 (q 2 (i (= (a 39 (c 39 89)) 95) (q 2 -9 (c -9 (c (a 89 (c (c (c (a 39 (c 39 -65)) 19) (c 27 3071)) (c 13 (c 767 (c 24575 (c 2 (c -71 ()))))))) 2))) (q 8)) 1) (q 2 (i (a (i 13 (q 2 (i 24575 (q) (q 1 . 1)) 1) (q)) 1) (q . 2) (q 8)) 1)) 1)) (c (c (c (q . 60) (c (concat (q . -53) (a 19 (c 19 (c 767 (c 6143 ()))))) ())) (c (c (q . 61) (c (sha256 (coinid 5119 (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 17) (sha256 (q . 2) (a 91 (c 91 (c 41 (c (sha256 (q . 1) 89) (c 11263 ()))))) (sha256 (q . 1))))) 23551) (q . -53) (a 19 (c 19 (c 13 (c (+ 6143 (- 11775 20) 12287) ()))))) ())) 8)) 1)) (c (c (a 21 (c (c 21 45) (c (a 47 95) (c 4 ())))) (a (i -65 (q 2 (i (= 1279 (coinid 319 (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 8) (sha256 (q . 2) (a 45 (c 45 (c 20 (c (sha256 (q . 1) 44) (c 703 ()))))) (sha256 (q . 1))))) 1471)) (q 1 . 1) (q)) 1) (q)) 1)) 1)) (c (c (c 5 (c (sha256 (q . 1) 5) (c 11 ()))) (coinid 639 1407 2943)) 1)) (c (c (q 2 (i (l 3) (q 11 (q . 2) (a 2 (c 2 5)) (a 2 (c 2 7))) (q 11 (q . 1) 3)) 1) (c (q 2 (i 5 (q 2 (i (a (i (= 17 (q . 51)) (q 2 (i 41 (q) (q 1 . 1)) 1) (q)) 1) (q 2 (q . 2) (c (a 4 (c 2 (c 13 (c 11 (c -71 (c 377 ())))))) 1)) (q 2 (q 4 (c 10 8) (c (+ 20 14) 28)) (c (c (a 4 (c 2 (c 13 7))) (a (i (= 17 (q . 51)) (q 4 (c (q . 51) (c (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 19) (sha256 (q . 2) (a 6 (c 6 (c 43 (c (sha256 (q . 1) 91) (c 41 ()))))) (sha256 (q . 1))))) 57)) 89) (q 2 (i (a (i (a (i (= 17 (q . 60)) (q 2 (i (= (strlen 41) (q . 33)) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (i (= (substr 41 () (q . 1)) (q . -53)) (q 1 . 1) (q)) 1) (q)) 1) (q 8) (q 4 9 ())) 1)) 1)) 1))) 1) (q 4 () (c () 15))) 1) (c (q 2 (i 3 (q 11 (q . 2) (sha256 (q . 260)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 5) (sha256 (q . 2) (a 2 (c 2 7)) (sha256 (q . 1))))) (q 11 (q . 257))) 1) (q 2 (i 5 (q 4 9 (a 2 (c 2 (c 13 7)))) (q . 7)) 1)))) 1)) debug_program: (a (q 2 (q 2 (q 2 (q 2 (q 2 (q 2 (q 4 (c (q . 70) (c 351 ())) 2) (c (a (i (not (not (l (r (r 39))))) (q 2 (i (= (a 287 (c 287 (f (r (r 39))))) 383) (q 2 (q 2 1727 (c 1727 (c 2 5))) (c (a (f (r (r 39))) (c -9 (c 87 (c 3071 (c 0x017fff (c 2 (c (f (r (r (r 39)))) ()))))))) 1)) (q 8 (q . "assertion failed at cat.rue:153:9"))) 1) (q 2 (i (a (i 87 (q 2 (i (= 0x017fff ()) (q 1 . 1) (q)) 1) (q)) 1) (q . 2) (q 8 (q . "assertion failed at cat.rue:171:9"))) 1)) 1) 1)) (c (c (c (q . 60) (c (concat (q . -53) (a -113 (c -113 (c 3071 (c 24575 ()))))) ())) (c (c (q . 61) (c (sha256 (concat (concat 91 (q . -53)) (a -113 (c -113 (c 87 (c 2 ())))))) ())) (f 19))) 1)) (c (+ (+ 12287 2) 24575) 1)) (c (- (f (r (r 1535))) (f (r 4))) 1)) (c (c (a 25 (c (c 25 (c 37 (c 45 (c 93 125)))) (c (a 47 95) (c 4 ())))) (c (a (i (l -65) (q 2 (i (= (f 767) (coinid (f -65) (a 45 (c (c 37 (c 93 125)) (c (f 4) (c (f (r 4)) (c (sha256 (concat (q . 1) (f (r (r 4))))) (c (f (r -65)) ())))))) (f (r (r -65))))) (q 1 . 1) (q)) 1) (q)) 1) (c (coinid (f 1535) (a 45 (c (c 37 (c 93 125)) (c (f 4) (c (f (r 4)) (c (sha256 (concat (q . 1) (f (r (r 4))))) (c (f (r 1535)) ())))))) (f (r (r 1535)))) (c (c 14 4) (c 10 767))))) 1)) (c (c (c 5 (c (sha256 (concat (q . 1) 5)) (c 11 ()))) (c (coinid (f 383) (f (r 383)) (f (r (r 383)))) (a 8 (c 8 23)))) 1)) (c (c (c (q 2 (i (not (l 3)) (q 11 (concat (q . 1) 3)) (q 11 (concat (concat (q . 2) (a 2 (c 2 (f 3)))) (a 2 (c 2 (r 3)))))) 1) (q 2 (i (not (l 5)) (q 4 () (c () 15)) (q 2 (i (a (i (= (f (f 5)) (q . 51)) (q 2 (i (= (f (r (f 5))) ()) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (q 4 (f 2) (c (f (r 2)) (r (r 2)))) (c (a 4 (c (c 4 (c 10 (c 22 (c 46 62)))) (c (r 5) (c 11 (c (f (r (r (r (f 5))))) (c (f (r (r (r (r (f 5)))))) ())))))) 1)) (q 2 (q 4 (c (f 6) (f 4)) (c (+ (f (r 4)) (r 6)) (r (r 4)))) (c (c (a 4 (c (c 4 (c 10 (c 22 (c 46 62)))) (c (r 5) (c 11 15)))) (a (i (= (f (f 5)) (q . 51)) (q 2 (q 4 2 (f (r (r (f 11))))) (c (c (q . 51) (c (a 22 (c (c 10 (c 46 62)) (c (f 11) (c (f (r 11)) (c (sha256 (concat (q . 1) (f (r (r 11))))) (c (f (r (f 5))) ())))))) (c (f (r (r (f 5)))) (r (r (r (f 5))))))) 1)) (q 2 (i (a (i (a (i (= (f (f 5)) (q . 60)) (q 2 (i (= (strlen (f (r (f 5)))) (q . 33)) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (i (= (substr (f (r (f 5))) () (q . 1)) (q . -53)) (q 1 . 1) (q)) 1) (q)) 1) (q 8 (q . "raise called at cat.rue:243:13") (q . "Created coin announcements must not have the ring morph byte")) (q 4 (f 5) ())) 1)) 1)) 1))) 1)) 1)) (c (c (q 2 (i (not (l 3)) (q 11 (concat (q . 1) (q . 1))) (q 2 6 (c (f 3) (a 4 (c (c 4 6) (r 3)))))) 1) (q 2 (i (l 5) (q 4 (f 5) (a 2 (c 2 (c (r 5) 7)))) (q . 7)) 1)) (c (q 2 14 (c 5 (a 4 (c (c 4 10) 7)))) (c (q 11 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 4)))) (sha256 (concat (concat (q . 2) (sha256 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 1)))) 2))) (sha256 (concat (concat (q . 2) 3) (sha256 (concat (q . 1) ())))))))) (q 11 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 2)))) (sha256 (concat (concat (q . 2) (sha256 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 1)))) 2))) (sha256 (concat (concat (q . 2) 3) (sha256 (concat (q . 1) ())))))))))))) 1)) solution: (0x00f43ce9fcc63d5019e209c103e6b0aaf56bbe7fc7fafae5af7f5ee6887a8719 0xd622c62a7292ffee5cf2537a90360ca0b7337b76d7014ec042930c0a87592213 (q (g1_negate () -113 (a (q 2 (i 47 (q 8) (q 2 (i (= 45 2) () (q 8)) 1)) 1) (c (q . 0x895eb35a355941ba7f6a8679a73bb9b8b62cae2b04ef5351eda42583c0f2d861) 1)) ()) (g1_negate 0xb8705f94744e7fc30300ac9b12d306b283f5a702937ee99beabf665be6023001 1 (0xb8705f94744e7fc30300ac9b12d306b283f5a702937ee99beabf665be6023001))) () () 0x615236766bed52d7abaa41d270407f3ec852981852334b213bd8515924459a5d (0x895eb35a355941ba7f6a8679a73bb9b8b62cae2b04ef5351eda42583c0f2d861 0x1ecb863db5d2ae6c71e9a8b0741acb3e034e8164b8ca0e564d5fad8b9dc875d5 1) (0x895eb35a355941ba7f6a8679a73bb9b8b62cae2b04ef5351eda42583c0f2d861 0x130deb20b44082a68293974f8cab9c51e21f9a9f3005000168eb77e49e0fc378 1) () ()) output: ((70 0x615236766bed52d7abaa41d270407f3ec852981852334b213bd8515924459a5d) (modpow 0xcb7f53b5de05b4afe58ab663b952aa785fd9ad911564709bd8eacbf4c58ba1e589) (% 0x389f1ea7b9fab7a9294104eb3a181d662f2dbe9c43fbe52802ba9b7eef357e77) (g1_negate 0xc9644528436f44cd9b33282684b4964f55d5551cb3a970ab9cf8f536e0d72ad1 1 (0xb8705f94744e7fc30300ac9b12d306b283f5a702937ee99beabf665be6023001))) -runtime_cost: 298527 -byte_cost: 18624000 -total_cost: 18922527 +runtime_cost: 297861 +byte_cost: 18192000 +total_cost: 18489861 diff --git a/examples/puzzles/royalty_split.yaml b/examples/puzzles/royalty_split.yaml index dea52ac1..0603710a 100644 --- a/examples/puzzles/royalty_split.yaml +++ b/examples/puzzles/royalty_split.yaml @@ -1,7 +1,7 @@ -program: (a (q 4 (c (q . 60) (c () ())) (c (c (q . 73) (c 11 ())) (a 4 (c (c 4 6) (c (c 5 23) (c 11 (c () 11))))))) (c (c (q 2 (i 9 (q 2 6 (c (c 4 6) (c 9 (c (c (/ (* 11 81) 13) 31) (c 11 (c 13 23)))))) (q 2 (i (= 13 23) (q) (q 8)) 1)) 1) (q 4 (c (q . 51) (c 17 (c (i 13 19 27) (c (c 17 ()) ())))) (a 4 (c (c 4 6) (c (c 13 47) (c 23 (c (+ 63 41) (- 27 19)))))))) 1)) +program: (a (q 4 (c (q . 60) (c () ())) (c (c (q . 73) (c 11 ())) (a 4 (c 2 (c (c 5 23) (c 11 (c () 11))))))) (c (c (q 2 (i 9 (q 2 6 (c 2 (c 9 (c (c (/ (* 11 81) 13) 31) (c 11 (c 13 23)))))) (q 2 (i (= 13 23) (q) (q 8)) 1)) 1) (q 4 (c (q . 51) (c 17 (c (i 13 19 27) (c (c 17 ()) ())))) (a 4 (c 2 (c (c 13 47) (c 23 (c (+ 63 41) (- 27 19)))))))) 1)) debug_program: (a (q 4 (c (q . 60) (c () ())) (c (c (q . 73) (c 11 ())) (a 4 (c (c 4 (c 10 14)) (c (c 5 23) (c 11 (c () 11))))))) (c (c (q 2 (i (not (l 9)) (q 2 (i (= 13 23) (q) (q 8 (q . "raise called at royalty_split.rue:32:9") (q . "Share sum doesn't match total"))) 1) (q 2 14 (c (c 4 (c 10 14)) (c 9 (c (c (a 10 (c 11 (c (f (r (f 9))) 13))) 31) (c 11 (c 13 23))))))) 1) (c (q 19 (* 2 5) 7) (q 2 (q 4 2 (a 9 (c (c 9 (c 21 29)) (c (c (r 11) 95) (c 47 (c (+ 127 (f (r (f 11)))) (- 55 39))))))) (c (c (q . 51) (c (f (f 5)) (c (i (not (l (r 5))) 27 19) (c (c (f (f 5)) ()) ())))) 1)))) 1)) solution: (((0x3816a97150946c7745457f45a4fed6c16890637847b2df95f383e439758732d7 80) (0x09731fc56bff8031dc9a16f60dcb6f6462960cd76d4b5233dd5bc21697d7fca7 20)) 1000 100) output: ((modpow ()) (73 1000) (g1_negate 0x3816a97150946c7745457f45a4fed6c16890637847b2df95f383e439758732d7 800 (0x3816a97150946c7745457f45a4fed6c16890637847b2df95f383e439758732d7)) (g1_negate 0x09731fc56bff8031dc9a16f60dcb6f6462960cd76d4b5233dd5bc21697d7fca7 200 (0x09731fc56bff8031dc9a16f60dcb6f6462960cd76d4b5233dd5bc21697d7fca7))) -runtime_cost: 15651 -byte_cost: 3732000 -total_cost: 3747651 +runtime_cost: 15116 +byte_cost: 3516000 +total_cost: 3531116 diff --git a/examples/puzzles/singleton.yaml b/examples/puzzles/singleton.yaml index 19bf687b..b7df26d7 100644 --- a/examples/puzzles/singleton.yaml +++ b/examples/puzzles/singleton.yaml @@ -1,15 +1,15 @@ -program: (a (q 2 (q 2 (i (all (logand 95 (q . 1)) (any 4 (= 6 43))) (q 4 (c (q . 73) (c 95 ())) (c (c (q . 71) (c 6 ())) (a 9 (c (c 9 (c 21 29)) (c 11 (c (a 23 -65) ())))))) (q 8)) 1) (c (a (i 119 (q 4 (q . 1) (coinid 39 (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 9) (sha256 (q . 2) (a 14 (c 14 (c (a 10 (c 10 5)) (c 87 ())))) (sha256 (q . 1))))) -73)) (q 4 () (coinid 39 29 87))) 1) 1)) (c (c (q 2 (i 11 (q 2 (i (a (i (= 35 (q . 51)) (q 2 (i (logand -77 (q . 1)) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (i 15 (q 8) (q 2 (q 2 (i (= 359 (q . -113)) (q . 2) (q 4 (c (q . 51) (c (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 19) (sha256 (q . 2) (a 29 (c 29 (c (a 21 (c 21 11)) (c -89 ())))) (sha256 (q . 1))))) (c 359 487))) 2)) 1) (c (a 4 (c (c 4 (c 10 14)) (c 5 (c 27 (q . 1))))) 1))) 1) (q 4 19 (a 4 (c (c 4 (c 10 14)) (c 5 (c 27 ())))))) 1) (q 2 (i 15 (q) (q 8)) 1)) 1) (c (q 2 (i (l 3) (q 11 (q . 2) (a 2 (c 2 5)) (a 2 (c 2 7))) (q 11 (q . 1) 3)) 1) (q 2 (i 3 (q 11 (q . 2) (sha256 (q . 260)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 5) (sha256 (q . 2) (a 2 (c 2 7)) (sha256 (q . 1))))) (q 11 (q . 257))) 1))) 1)) +program: (a (q 2 (q 2 (i (all (logand 95 (q . 1)) (any 4 (= 6 43))) (q 4 (c (q . 73) (c 95 ())) (c (c (q . 71) (c 6 ())) (a 9 (c 5 (c 11 (c (a 23 -65) ())))))) (q 8)) 1) (c (a (i 119 (q 4 (q . 1) (coinid 39 (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 9) (sha256 (q . 2) (a 14 (c 14 (c (a 10 (c 10 5)) (c 87 ())))) (sha256 (q . 1))))) -73)) (q 4 () (coinid 39 29 87))) 1) 1)) (c (c (q 2 (i 11 (q 2 (i (a (i (= 35 (q . 51)) (q 2 (i (logand -77 (q . 1)) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (i 15 (q 8) (q 2 (q 2 (i (= 359 (q . -113)) (q . 2) (q 4 (c (q . 51) (c (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 19) (sha256 (q . 2) (a 29 (c 29 (c (a 21 (c 21 11)) (c -89 ())))) (sha256 (q . 1))))) -25)) 2)) 1) (c (a 4 (c 2 (c 5 (c 27 (q . 1))))) 1))) 1) (q 4 19 (a 4 (c 2 (c 5 (c 27 ())))))) 1) (q 2 (i 15 (q) (q 8)) 1)) 1) (c (q 2 (i (l 3) (q 11 (q . 2) (a 2 (c 2 5)) (a 2 (c 2 7))) (q 11 (q . 1) 3)) 1) (q 2 (i 3 (q 11 (q . 2) (sha256 (q . 260)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 5) (sha256 (q . 2) (a 2 (c 2 7)) (sha256 (q . 1))))) (q 11 (q . 257))) 1))) 1)) debug_program: (a (q 2 (q 2 (q 2 (i (all 13 2) (q 2 (q 4 4 (c 10 14)) (c (c (c (q . 73) (c -65 ())) (c (c (q . 71) (c (r 9) ())) (a 35 (c (c (c 35 51) (c 43 (c 91 (c -69 -5)))) (c 23 (c (a 47 383) ())))))) 1)) (q 8 (q . "assertion failed at singleton.rue:50:5"))) 1) (c (any (f 4) (= (r 4) (f (r 11)))) 1)) (c (c (a (i (r (r 23)) (q 4 (q . 1) (coinid (f 23) (a 22 (c (c 10 (c 46 62)) (c (f 5) (c (a 12 (c 12 5)) (c (f (r 23)) ()))))) (f (r (r 23))))) (q 4 () (coinid (f 23) (r (r 5)) (f (r 23))))) 1) (= (% 47 (q . 2)) (q . 1))) 1)) (c (c (c (q 2 (i (not (l 11)) (q 2 (i 15 (q) (q 8 (q . "assertion failed at singleton.rue:75:9"))) 1) (q 2 (i (a (i (= (f (f 11)) (q . 51)) (q 2 (i (= (% (f (r (r (f 11)))) (q . 2)) (q . 1)) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (i (not 15) (q 2 (q 2 (i (= (f (r (r (f 23)))) (- () (q . 113))) (q . 2) (q 2 (q 4 2 5) (c (c (q . 51) (c (a 45 (c (c 21 (c 93 125)) (c (f 11) (c (a 25 (c 25 11)) (c (f (r (f 23))) ()))))) (c (f (r (r (f 23)))) (r (r (r (f 23))))))) 1))) 1) (c (a 8 (c (c (c 8 12) (c 10 (c 22 (c 46 62)))) (c 5 (c (r 11) (q . 1))))) 1)) (q 8 (q . "assertion failed at singleton.rue:82:9"))) 1) (q 4 (f 11) (a 8 (c (c (c 8 12) (c 10 (c 22 (c 46 62)))) (c 5 (c (r 11) ())))))) 1)) 1) (q 2 (i (not (l 3)) (q 11 (concat (q . 1) 3)) (q 11 (concat (concat (q . 2) (a 2 (c 2 (f 3)))) (a 2 (c 2 (r 3)))))) 1)) (c (q 2 (i (not (l 3)) (q 11 (concat (q . 1) (q . 1))) (q 2 6 (c (f 3) (a 4 (c (c 4 6) (r 3)))))) 1) (c (q 2 14 (c 5 (a 4 (c (c 4 10) 7)))) (c (q 11 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 4)))) (sha256 (concat (concat (q . 2) (sha256 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 1)))) 2))) (sha256 (concat (concat (q . 2) 3) (sha256 (concat (q . 1) ())))))))) (q 11 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 2)))) (sha256 (concat (concat (q . 2) (sha256 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 1)))) 2))) (sha256 (concat (concat (q . 2) 3) (sha256 (concat (q . 1) ())))))))))))) 1)) solution: ((0x7faa3253bfddd1e0decb0906b2dc6247bbc4cf608f58345d173adb63e8b47c9f 0x1dee7745609c0ebcf4e1cfe01f2b2e7f4deb122eb735217e7af08029ba322b13 . 0xeff07522495060c066f66f32acc2a77e3a3e737aca8baea4d1a64ea4cdc13da9) (a (q 2 (q 2 62 (c 2 (c 5 (c (a 47 95) (c () (c (c (c 11 (c 23 ())) (q ())) (q ()))))))) (c (q ((a . 51) 4 1 . 1) (a 2 (i 5 (q 2 26 (c 2 (c 13 (c (sha256 18 (sha256 44 20) (sha256 18 (sha256 18 (sha256 44 60) 9) (sha256 18 11 (sha256 44 ())))) ())))) (q . 11)) 1) (sha256 18 (sha256 44 16) (sha256 18 (sha256 18 (sha256 44 60) 5) (sha256 18 (a 26 (c 2 (c 7 (c (sha256 44 44) ())))) (sha256 44 ())))) (a (i (l 5) (q 11 (q . 2) (a 46 (c 2 (c 9 ()))) (a 46 (c 2 (c 13 ())))) (q 11 (q . 1) 5)) 1) 2 (i 11 (q 2 (i (= 35 24) (q 2 (i (logand -77 44) (q 2 (i (not 23) (q 2 62 (c 2 (c 5 (c 27 (c 51 (c 47 (c 95 ()))))))) (q 8)) 1) (q 4 19 (a 62 (c 2 (c 5 (c 27 (c 23 (c 47 (c 95 ()))))))))) 1) (q 2 (i (= 35 (q . -24)) (q 2 62 (c 2 (c 5 (c 27 (c 23 (c (a (i (all (= (a 46 (c 2 (c 83 ()))) 335) (not 95)) (q 2 83 (c -113 (c 335 (c -77 ())))) (q 8)) 1) (c 44 ()))))))) (q 4 19 (a 62 (c 2 (c 5 (c 27 (c 23 (c 47 (c 95 ()))))))))) 1)) 1) (q 4 (c 24 (c (a 22 (c 2 (c 5 (c 39 (c (sha256 44 335) (c (a 46 (c 2 (c -113 ()))) (c (sha256 44 5) ()))))))) 55)) -81)) 1) 1)) (c (q . 0xa04d9f57764f54a43e4030befb4d80026e870519aaa66334aef8304f5d0393c2) (c (q (117 "https://chia-monster.ggames.mobi/chia-monster/images/warriors/females/legendary_warrior_v2.jpg") (104 . 0x9beb5d62e9708e3178414dcf7340bc3547fb6fdeadcf93a397d87dbb432bd923) (28021 "https://chia-monster.ggames.mobi/api/cmt/meta/warrior/6f1cb204-b594-4516-af4c-f9f55e30fd39.json") (27765 "https://chia-monster.ggames.mobi/chia-monster/license.txt") (29550 . 1) (29556 . 1) (28008 . 0x347340029cb9234e7a43d75d4c5649136ac11a97cd75c1137da2444868cab52b) (27752 . 0x724672b619bcbb77d46cba416327376944366d6c71e87abe49be19abbca0444f)) (c (q . 0xfe8a4b4e27a2e29a4d3fc7ce9d527adbcaccbab6ada3903ccf3ba9a769d2d78b) (c (q 2 (q 2 (q 2 38 (c 2 (c 5 (c 23 (c 11 (c (a 47 95) ())))))) (c (q ((-21172 2 . 51) (keccak256 . 4) -10 . 1) ((q . 2) (a (i 5 (q 2 42 (c 2 (c 13 (c (sha256 50 (sha256 60 52) (sha256 50 (sha256 50 (sha256 60 34) 9) (sha256 50 11 (sha256 60 ())))) ())))) (q . 11)) 1) 4 (c 56 (c (a 54 (c 2 (c 5 (c 39 (c (a 46 (c 2 (c (a (i -81 (q . -81) (q . 11)) 1) ()))) (c (sha256 60 79) (c (sha256 60 5) ()))))))) 55)) 367) ((a 62 (c 2 (c 5 (c 11 (c 23 (c 47 (c 47 (q () ())))))))) 11 50 (sha256 60 40) (sha256 50 (sha256 50 (sha256 60 34) 5) (sha256 50 (a 42 (c 2 (c 7 (c (sha256 60 60) ())))) (sha256 60 ())))) (a (i (l 5) (q 11 (q . 2) (a 46 (c 2 (c 9 ()))) (a 46 (c 2 (c 13 ())))) (q 11 (q . 1) 5)) 1) 2 (i 95 (q 2 (i (= 287 56) (q 2 (i (= (logand 1439) 60) (q 2 (i (not -65) (q 2 62 (c 2 (c 5 (c 11 (c 23 (c 47 (c -33 (c 415 (c 383 ()))))))))) (q 8)) 1) (q 4 -97 (a 62 (c 2 (c 5 (c 11 (c 23 (c 47 (c -33 (c -65 (c 383 ()))))))))))) 1) (q 2 (i (= 287 44) (q 2 (i (not 383) (q 4 (c 36 (c (concat 16 (a 46 (c 2 (c 415 ())))) ())) (a 62 (c 2 (c 5 (c 11 (c 23 (c 47 (c -33 (c -65 (c (a 11 (c 23 (c 47 (c 415 ())))) ())))))))))) (q 8)) 1) (q 2 (i (= 287 36) (q 2 (i (not (a (i (= (q . 34) (strlen 671)) (q 2 (i (= (substr 671 () (q . 2)) 16) (q 1 . 1) ()) 1) ()) 1)) (q 4 -97 (a 62 (c 2 (c 5 (c 11 (c 23 (c 47 (c -33 (c -65 (c 383 ())))))))))) (q 8)) 1) (q 4 -97 (a 62 (c 2 (c 5 (c 11 (c 23 (c 47 (c -33 (c -65 (c 383 ()))))))))))) 1)) 1)) 1) (q 2 58 (c 2 (c 5 (c 11 (c -65 (c (a (i 383 (q . 383) (q 2 11 (c 23 (c 47 (q ()))))) 1) ()))))))) 1) 1)) (c (q . 0xc5abea79afaa001b5427dfa0c8cf42ca6f38f5841b78f9b3c252733eb2de2726) (c (q) (c (q 2 (q 2 (q 2 (i -65 (q 4 319 (c () (c (a (i (all 319 (not (= 319 47))) (q 4 (c 16 (c (sha256 (a 46 (c 2 (c 9 (c 1471 (c (a 62 (c 2 (c (c 9 (c 319 29)) ()))) ()))))) 21) ())) (a 22 (c 2 (c 11 (c 23 (c 703 (c 21 ()))))))) (q 2 22 (c 2 (c 11 (c 23 (c 703 (c 21 ()))))))) 1) ()))) (q 4 47 (q () ()))) 1) (c (q ((63 . 2) 4 1 . 1) (10000 2 2 (i 5 (q 2 58 (c 2 (c 13 (c (sha256 42 (sha256 44 20) (sha256 42 (sha256 42 (sha256 44 60) 9) (sha256 42 11 (sha256 44 ())))) ())))) (q . 11)) 1) (a (i 23 (q 4 (c 16 (c (sha256 -89 (a 62 (c 2 (c (c 47 (c (c 5 (c (f (divmod (* 71 11) 18)) (c (c 5 ()) ()))) ())) ())))) ())) (a 22 (c 2 (c 5 (c 11 (c 55 (c 47 ()))))))) ()) 1) (sha256 42 (sha256 44 24) (sha256 42 (sha256 42 (sha256 44 60) 5) (sha256 42 (a 58 (c 2 (c 7 (c (sha256 44 44) ())))) (sha256 44 ())))) 2 (i (l 5) (q 11 (q . 2) (a 62 (c 2 (c 9 ()))) (a 62 (c 2 (c 13 ())))) (q 11 (q . 1) 5)) 1) 1)) (c (q 0x7faa3253bfddd1e0decb0906b2dc6247bbc4cf608f58345d173adb63e8b47c9f 0x1dee7745609c0ebcf4e1cfe01f2b2e7f4deb122eb735217e7af08029ba322b13 . 0xeff07522495060c066f66f32acc2a77e3a3e737aca8baea4d1a64ea4cdc13da9) (c (q . 0x15865265653a7cb6f807a227aa9ad05498babe13ec906155b2676d5f92f84d40) (c (q) 1)))) (c (q 2 (q 2 (q 2 (i 11 (q 2 (i (= 5 (point_add 11 (pubkey_for_exp (sha256 11 (a 6 (c 2 (c 23 ()))))))) (q 2 23 47) (q 8)) 1) (q 4 (c 4 (c 5 (c (a 6 (c 2 (c 23 ()))) ()))) (a 23 47))) 1) (c (q 50 2 (i (l 5) (q 11 (q . 2) (a 6 (c 2 (c 9 ()))) (a 6 (c 2 (c 13 ())))) (q 11 (q . 1) 5)) 1) 1)) (c (q . 0xafa76c68cfb723922e67dbfa6bda38fd64609b41d2a4498df49a6c839ed8b2d1c042f5961a2ab9b318cc64aef72364a5) 1)) 1))))) 1))))) (0xdebedabb069cb2564157ff1ca5aa80b3cb3d7eb930f52ff1a40b8b78c84f4125 0x9fc9c96a5f2417e8617ea847651ceaf4789e6528a55101457d120c630a8ac030 1) 1 (((() (q (g1_negate 0x291c295548f95c2462caa05165f67e9f6d806153856edcbb84290162e7f810c5 1 (0x291c295548f95c2462caa05165f67e9f6d806153856edcbb84290162e7f810c5)) (-10 () () ())) ())))) output: ((73 1) (71 0x82acf3e76d5657e98438ad4dc0fcaf84f8e194d78313206ead021e2d5afe5e3a) (g1_multiply 0xafa76c68cfb723922e67dbfa6bda38fd64609b41d2a4498df49a6c839ed8b2d1c042f5961a2ab9b318cc64aef72364a5 0x8f25313e125d83841401ae4bf3831b674256c0fa77c8b30f12dd5a7bce846e75) (keccak256 0xad4c53b883241fddfd1c01b608bd4b6633e3fefd950e27c194aab24e6eb0a49bebd2) (g1_negate 0x899b958268f46b62cc8d2148fef14ce74e8220c507ee9a06a78924fb9efc4d75 1 (0x291c295548f95c2462caa05165f67e9f6d806153856edcbb84290162e7f810c5))) -runtime_cost: 1371980 -byte_cost: 10440000 -total_cost: 11811980 +runtime_cost: 1370969 +byte_cost: 9900000 +total_cost: 11270969 tests: - name: tests - program: (a (q 2 (q 2 (q 2 (q 2 (i (= (a 39 (c 39 (a -73 (c 87 (c 39 (c -9 (c 2 (c (q . 1) (c (c 19 (c () ())) (c (q . 1) (c (c (c (q . 51) (c 59 (c (q . 1) ()))) ()) ()))))))))))) (a 39 (c 39 (c (c (q . 73) (c (q . 1) ())) (c (c (q . 71) (c 5 ())) (c (c (q . 51) (c (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 4) (sha256 (q . 2) (a -9 (c -9 (c (a 39 (c 39 2)) (c 59 ())))) (sha256 (q . 1))))) (c (q . 1) ()))) ())))))) (q) (q 8)) 1) (c (c (a 19 (c 19 (c (q . 2) (c (c (q . 1) 91) (c (c (q . 4) (c (c (q . 1) 43) (c (c (q . 4) (c (c (q . 1) 19) (c (c (q . 4) (c (c (q . 1) 123) (c (q . 1) ()))) ()))) ()))) ()))))) (c 2 21)) 1)) (c (coinid 4 10 ()) 1)) (c (c (sha256 (q . "parent_parent_coin_info")) (c (sha256 (q . "launcher_puzzle")) (sha256 (q . "p2_puzzle_hash")))) 1)) (c (c (q 2 (i (l 3) (q 11 (q . 2) (a 2 (c 2 5)) (a 2 (c 2 7))) (q 11 (q . 1) 3)) 1) (c (q 2 (i 11 (q 2 (i (a (i (= 35 (q . 51)) (q 2 (i (logand -77 (q . 1)) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (i 15 (q 8) (q 2 (q 2 (i (= 359 (q . -113)) (q . 2) (q 4 (c (q . 51) (c (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 19) (sha256 (q . 2) (a 29 (c 29 (c (a 9 (c 9 11)) (c -89 ())))) (sha256 (q . 1))))) (c 359 487))) 2)) 1) (c (a 10 (c (c 4 (c 10 14)) (c 5 (c 27 (q . 1))))) 1))) 1) (q 4 19 (a 10 (c (c 4 (c 10 14)) (c 5 (c 27 ())))))) 1) (q 2 (i 15 (q) (q 8)) 1)) 1) (c (q 2 (q 2 (i (all (logand 383 (q . 1)) (any 4 (= 6 -81))) (q 4 (c (q . 73) (c 383 ())) (c (c (q . 71) (c 6 ())) (a 5 (c (c 11 (c 5 23)) (c 47 (c (a 95 767) ())))))) (q 8)) 1) (c (a (i 479 (q 4 (q . 1) (coinid -97 (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 39) (sha256 (q . 2) (a 11 (c 11 (c (a 5 (c 5 23)) (c 351 ())))) (sha256 (q . 1))))) 735)) (q 4 () (coinid -97 119 351))) 1) 1)) (q 2 (i 3 (q 11 (q . 2) (sha256 (q . 260)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 5) (sha256 (q . 2) (a 2 (c 2 7)) (sha256 (q . 1))))) (q 11 (q . 257))) 1)))) ())) + program: (a (q 2 (q 2 (q 2 (q 2 (i (= (a 39 (c 39 (a -73 (c 87 (c 39 (c -9 (c 2 (c (q . 1) (c (c 19 (c () ())) (c (q . 1) (c (c (c (q . 51) (c 59 (c (q . 1) ()))) ()) ()))))))))))) (a 39 (c 39 (c (c (q . 73) (c (q . 1) ())) (c (c (q . 71) (c 5 ())) (c (c (q . 51) (c (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 4) (sha256 (q . 2) (a -9 (c -9 (c (a 39 (c 39 2)) (c 59 ())))) (sha256 (q . 1))))) (c (q . 1) ()))) ())))))) (q) (q 8)) 1) (c (c (a 19 (c 19 (c (q . 2) (c (c (q . 1) 91) (c (c (q . 4) (c (c (q . 1) 43) (c (c (q . 4) (c (c (q . 1) 19) (c (c (q . 4) (c (c (q . 1) 123) (c (q . 1) ()))) ()))) ()))) ()))))) (c 2 21)) 1)) (c (coinid 4 10 ()) 1)) (c (c (sha256 (q . "parent_parent_coin_info")) (c (sha256 (q . "launcher_puzzle")) (sha256 (q . "p2_puzzle_hash")))) 1)) (c (c (q 2 (i (l 3) (q 11 (q . 2) (a 2 (c 2 5)) (a 2 (c 2 7))) (q 11 (q . 1) 3)) 1) (c (q 2 (i 11 (q 2 (i (a (i (= 35 (q . 51)) (q 2 (i (logand -77 (q . 1)) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (i 15 (q 8) (q 2 (q 2 (i (= 359 (q . -113)) (q . 2) (q 4 (c (q . 51) (c (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 19) (sha256 (q . 2) (a 29 (c 29 (c (a 9 (c 9 11)) (c -89 ())))) (sha256 (q . 1))))) -25)) 2)) 1) (c (a 10 (c 2 (c 5 (c 27 (q . 1))))) 1))) 1) (q 4 19 (a 10 (c 2 (c 5 (c 27 ())))))) 1) (q 2 (i 15 (q) (q 8)) 1)) 1) (c (q 2 (q 2 (i (all (logand 383 (q . 1)) (any 4 (= 6 -81))) (q 4 (c (q . 73) (c 383 ())) (c (c (q . 71) (c 6 ())) (a 5 (c (c 11 (c 5 23)) (c 47 (c (a 95 767) ())))))) (q 8)) 1) (c (a (i 479 (q 4 (q . 1) (coinid -97 (sha256 (q . 2) (sha256 (q . 258)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 39) (sha256 (q . 2) (a 11 (c 11 (c (a 5 (c 5 23)) (c 351 ())))) (sha256 (q . 1))))) 735)) (q 4 () (coinid -97 119 351))) 1) 1)) (q 2 (i 3 (q 11 (q . 2) (sha256 (q . 260)) (sha256 (q . 2) (sha256 (q . 2) (sha256 (q . 257)) 5) (sha256 (q . 2) (a 2 (c 2 7)) (sha256 (q . 1))))) (q 11 (q . 257))) 1)))) ())) debug_program: (a (q 2 (q 2 (q 2 (q 2 (q 2 (i (= (a -113 (c -113 2)) (a -113 (c -113 (c (c (q . 73) (c (q . 1) ())) (c (c (q . 71) (c 19 ())) (c (c (q . 51) (c (a 367 (c (c 431 (c 751 1007)) (c (f 5) (c (a -113 (c -113 5)) (c 87 ()))))) (c (q . 1) ()))) ())))))) (q) (q 8 (q . "assertion failed at singleton.rue:132:3"))) 1) (c (a -105 (c 103 (c 71 (c -73 (c -41 (c 375 (c 503 (c 2 (c 59 (c 13 (c (q . 1) (c (c (c (q . 51) (c 43 (c (q . 1) ()))) ()) ())))))))))))) 1)) (c (c (a 35 (c 35 (c (q . 2) (c (c (q . 1) 75) (c (c (q . 4) (c (c (q . 1) 51) (c (c (q . 4) (c (c (q . 1) 35) (c (c (q . 4) (c (c (q . 1) 91) (c (c (q . 4) (c (c (q . 1) 107) (c (c (q . 4) (c (c (q . 1) -69) (c (c (q . 4) (c (c (q . 1) -5) (c (q . 1) ()))) ()))) ()))) ()))) ()))) ()))) ()))))) (c 4 25)) 1)) (c (c (coinid 8 12 ()) (c 8 (c () ()))) 1)) (c (c (c (sha256 (q . "parent_parent_coin_info")) (sha256 (q . "launcher_puzzle"))) (c (sha256 (q . "p2_puzzle_hash")) (c (q . 2) (c (c (q . 1) (q . 1)) (c (q . 1) ()))))) 1)) (c (c (c (q 2 (i (not (l 3)) (q 11 (concat (q . 1) 3)) (q 11 (concat (concat (q . 2) (a 2 (c 2 (f 3)))) (a 2 (c 2 (r 3)))))) 1) (q 2 (i (not (l 11)) (q 2 (i 15 (q) (q 8 (q . "assertion failed at singleton.rue:75:9"))) 1) (q 2 (i (a (i (= (f (f 11)) (q . 51)) (q 2 (i (= (% (f (r (r (f 11)))) (q . 2)) (q . 1)) (q 1 . 1) (q)) 1) (q)) 1) (q 2 (i (not 15) (q 2 (q 2 (i (= (f (r (r (f 23)))) (- () (q . 113))) (q . 2) (q 2 (q 4 2 5) (c (c (q . 51) (c (a 93 (c (c 45 (c -67 -3)) (c (f 11) (c (a 9 (c 9 11)) (c (f (r (f 23))) ()))))) (c (f (r (r (f 23)))) (r (r (r (f 23))))))) 1))) 1) (c (a 10 (c (c 4 (c 10 (c 22 (c 46 (c 94 126))))) (c 5 (c (r 11) (q . 1))))) 1)) (q 8 (q . "assertion failed at singleton.rue:82:9"))) 1) (q 4 (f 11) (a 10 (c (c 4 (c 10 (c 22 (c 46 (c 94 126))))) (c 5 (c (r 11) ())))))) 1)) 1)) (c (c (q 2 (q 2 (q 2 (i (all 13 2) (q 2 (q 4 4 (c 10 14)) (c (c (c (q . 73) (c 6143 ())) (c (c (q . 71) (c (r 9) ())) (a 11 (c (c 23 (c 11 (c 95 (c 47 (c -65 383))))) (c 767 (c (a 1535 12287) ())))))) 1)) (q 8 (q . "assertion failed at singleton.rue:50:5"))) 1) (c (any (f 4) (= (r 4) (f (r 383)))) 1)) (c (c (a (i (r (r 767)) (q 4 (q . 1) (coinid (f 767) (a 11 (c (c 23 (c 47 95)) (c (f -65) (c (a 5 (c 5 -65)) (c (f (r 767)) ()))))) (f (r (r 767))))) (q 4 () (coinid (f 767) (r (r -65)) (f (r 767))))) 1) (= (% 1535 (q . 2)) (q . 1))) 1)) (q 2 (i (not (l 3)) (q 11 (concat (q . 1) (q . 1))) (q 2 6 (c (f 3) (a 4 (c (c 4 6) (r 3)))))) 1)) (c (q 2 14 (c 5 (a 4 (c (c 4 10) 7)))) (c (q 11 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 4)))) (sha256 (concat (concat (q . 2) (sha256 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 1)))) 2))) (sha256 (concat (concat (q . 2) 3) (sha256 (concat (q . 1) ())))))))) (q 11 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 2)))) (sha256 (concat (concat (q . 2) (sha256 (concat (concat (q . 2) (sha256 (concat (q . 1) (q . 1)))) 2))) (sha256 (concat (concat (q . 2) 3) (sha256 (concat (q . 1) ())))))))))))) ())) output: () - runtime_cost: 1331664 - byte_cost: 17796000 - total_cost: 19127664 + runtime_cost: 1288691 + byte_cost: 17400000 + total_cost: 18688691 diff --git a/tests/destructuring.rue b/tests/destructuring.rue index c63b190d..59e34cef 100644 --- a/tests/destructuring.rue +++ b/tests/destructuring.rue @@ -2,6 +2,7 @@ fn main() { assert pair((100, 200)) == 300; assert list([1, 2, 3]) == 6; assert point(Point { x: 100, y: 200 }) == 300; + assert point_destructure_struct_ref(Point { x: 100, y: 200 }) == 300; } fn pair((a, b): (Int, Int)) -> Int { @@ -20,3 +21,7 @@ struct Point { fn point({ x, y }: Point) -> Int { x + y } + +fn point_destructure_struct_ref({ x, ...point }: Point) -> Int { + x + point.y +} diff --git a/tests/destructuring.yaml b/tests/destructuring.yaml index 1824fc0c..4a9b77ff 100644 --- a/tests/destructuring.yaml +++ b/tests/destructuring.yaml @@ -1,6 +1,6 @@ -program: (a (q 2 (i (= (a 6 (c (q . 100) (q . 200))) (q . 300)) (q 2 (i (= (a (c (c (q . 16) ()) (c (q . 1) (c (q . 2) (c (q . 3) ())))) ()) (q . 6)) (q 2 (i (= (a 4 (c (q . 100) (c (q . 200) ()))) (q . 300)) (q) (q 8)) 1) (q 8)) 1) (q 8)) 1) (c (c (q 16 2 5) (q 16 2 3)) ())) -debug_program: (a (q 2 (i (= (a 14 (c (q . 100) (q . 200))) (q . 300)) (q 2 (i (= (a 10 (c (q . 1) (c (q . 2) (c (q . 3) ())))) (q . 6)) (q 2 (i (= (a 4 (c (q . 100) (c (q . 200) ()))) (q . 300)) (q) (q 8 (q . "assertion failed at destructuring.rue:4:5"))) 1) (q 8 (q . "assertion failed at destructuring.rue:3:5"))) 1) (q 8 (q . "assertion failed at destructuring.rue:2:5"))) 1) (c (c (q 16 (f 1) (f (r 1))) (c (q 2 (c (c (q . 16) ()) 1) ()) (q 16 (f 1) (r 1)))) ())) +program: (a (q 2 (i (= (a 14 (c (q . 100) (q . 200))) (q . 300)) (q 2 (i (= (a (c (c (q . 16) ()) (c (q . 1) (c (q . 2) (c (q . 3) ())))) ()) (q . 6)) (q 2 (i (= (a 10 (c (q . 100) (c (q . 200) ()))) (q . 300)) (q 2 (i (= (a 4 (c (q . 100) (c (q . 200) ()))) (q . 300)) (q) (q 8)) 1) (q 8)) 1) (q 8)) 1) (q 8)) 1) (c (c (q 16 2 5) (c (q 16 2 5) (q 16 2 3))) ())) +debug_program: (a (q 2 (i (= (a 14 (c (q . 100) (q . 200))) (q . 300)) (q 2 (i (= (a 10 (c (q . 1) (c (q . 2) (c (q . 3) ())))) (q . 6)) (q 2 (i (= (a 12 (c (q . 100) (c (q . 200) ()))) (q . 300)) (q 2 (i (= (a 8 (c (q . 100) (c (q . 200) ()))) (q . 300)) (q) (q 8 (q . "assertion failed at destructuring.rue:5:5"))) 1) (q 8 (q . "assertion failed at destructuring.rue:4:5"))) 1) (q 8 (q . "assertion failed at destructuring.rue:3:5"))) 1) (q 8 (q . "assertion failed at destructuring.rue:2:5"))) 1) (c (c (c (q 16 (f 1) (f (r 1))) (q 16 (f 1) (f (r 1)))) (c (q 2 (c (c (q . 16) ()) 1) ()) (q 16 (f 1) (r 1)))) ())) output: () -runtime_cost: 5415 -byte_cost: 2532000 -total_cost: 2537415 +runtime_cost: 7043 +byte_cost: 3348000 +total_cost: 3355043 diff --git a/tests/symbols/circular_module.yaml b/tests/symbols/circular_module.yaml index 6605cc69..4df8528b 100644 --- a/tests/symbols/circular_module.yaml +++ b/tests/symbols/circular_module.yaml @@ -1,7 +1,7 @@ -program: (a (q 2 4 (c (c 4 6) (q . 3))) (c (c (q 2 (i (> 3 ()) (q 2 6 (c (c 4 6) 3)) (q)) 1) (q 16 (* (a 4 (c (c 4 6) (- 3 (q . 1)))) (q . 2)) 3)) ())) +program: (a (q 2 4 (c 2 (q . 3))) (c (c (q 2 (i (> 3 ()) (q 2 6 1) (q)) 1) (q 16 (* (a 4 (c 2 (- 3 (q . 1)))) (q . 2)) 3)) ())) debug_program: (a (q 2 4 (c (c 4 6) (q . 3))) (c (c (q 2 (i (> 3 ()) (q 2 6 (c (c 4 6) 3)) (q)) 1) (q 16 (* (q . 2) (a 4 (c (c 4 6) (- 3 (q . 1))))) 3)) ())) solution: () output: '11' -runtime_cost: 14069 -byte_cost: 1524000 -total_cost: 1538069 +runtime_cost: 13011 +byte_cost: 1236000 +total_cost: 1249011 diff --git a/wasm/Cargo.toml b/wasm/Cargo.toml index ff3fe135..1030a7f4 100644 --- a/wasm/Cargo.toml +++ b/wasm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rue-wasm" -version = "0.7.1" +version = "0.8.0" edition = "2024" publish = false license = "Apache-2.0"