From 93347d8e7b15c5caff993b2885d4a3b62c6b36b1 Mon Sep 17 00:00:00 2001 From: KtorZ Date: Fri, 1 Mar 2024 17:02:49 +0100 Subject: [PATCH] Add Fuzzer to the prelude. --- crates/aiken-lang/src/builtins.rs | 26 ++++++++++++++++++- .../acceptance_tests/095/lib/aiken/fuzz.ak | 3 --- examples/acceptance_tests/095/lib/foo.ak | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/crates/aiken-lang/src/builtins.rs b/crates/aiken-lang/src/builtins.rs index 90c6b947..4417a89b 100644 --- a/crates/aiken-lang/src/builtins.rs +++ b/crates/aiken-lang/src/builtins.rs @@ -29,7 +29,7 @@ pub const OPTION: &str = "Option"; pub const ORDERING: &str = "Ordering"; pub const REDEEMER_WRAPPER: &str = "RedeemerWrapper"; pub const PRNG: &str = "PRNG"; -pub const FUZZER: &str = "FUZZER"; +pub const FUZZER: &str = "Fuzzer"; /// Build a prelude that can be injected /// into a compiler pipeline @@ -482,6 +482,23 @@ pub fn prelude(id_gen: &IdGenerator) -> TypeInfo { ), ); + // Fuzzer + // + // pub type Fuzzer = + // fn(PRNG) -> Option<(PRNG, a)> + + let fuzzer_value = generic_var(id_gen.next()); + prelude.types.insert( + FUZZER.to_string(), + TypeConstructor { + location: Span::empty(), + parameters: vec![fuzzer_value.clone()], + tipo: fuzzer(fuzzer_value), + module: "".to_string(), + public: true, + }, + ); + prelude } @@ -1302,6 +1319,13 @@ pub fn prng() -> Rc { }) } +pub fn fuzzer(a: Rc) -> Rc { + Rc::new(Type::Fn { + args: vec![prng()], + ret: option(tuple(vec![prng(), a])), + }) +} + pub fn list(t: Rc) -> Rc { Rc::new(Type::App { public: true, diff --git a/examples/acceptance_tests/095/lib/aiken/fuzz.ak b/examples/acceptance_tests/095/lib/aiken/fuzz.ak index 4c783742..2c9589a9 100644 --- a/examples/acceptance_tests/095/lib/aiken/fuzz.ak +++ b/examples/acceptance_tests/095/lib/aiken/fuzz.ak @@ -2,9 +2,6 @@ use aiken/builtin const max_int: Int = 255 -pub type Fuzzer = - fn(PRNG) -> Option<(PRNG, a)> - // Primitives pub fn any_int() -> Fuzzer { diff --git a/examples/acceptance_tests/095/lib/foo.ak b/examples/acceptance_tests/095/lib/foo.ak index b73ea8d8..680d633d 100644 --- a/examples/acceptance_tests/095/lib/foo.ak +++ b/examples/acceptance_tests/095/lib/foo.ak @@ -1,5 +1,5 @@ use aiken/dict.{Dict} -use aiken/fuzz.{Fuzzer} +use aiken/fuzz use aiken/int pub type Season {