summaryrefslogtreecommitdiff
path: root/tests/src/rename_attribute.rs
diff options
context:
space:
mode:
authorEscherichia2024-06-18 22:47:35 +0200
committerGitHub2024-06-18 22:47:35 +0200
commitaa8e74197687ecc6d8f925babc8ba3cd6c739990 (patch)
treef9975ae9f6276e8bd9db866621497a53485007d1 /tests/src/rename_attribute.rs
parent370f2668f0a36fb31ed9abb4ba613dad333cf406 (diff)
Support for renaming using the rename attribute in charon (#239)
* support for renaming using the rename attribute in charon * support for global decl * add support for renaming field * applied suggested changes and began adding support for variant * finished support for renaming variant * applied suggested changes * add tests * fixed variant and field renaming * update charon-pin * update flake.lock * Update the charon pin * Fix an issue with renaming trait method implementations * Fix an issue with the renaming of trait implementations * Fix an issue when renaming enumerations * Update the Charon pin * Fix the F* tests * Fix an issue with the spans for the loops * Fix the tests * Update a comment * Use fuel in the coq tests * Generate the template decreases clauses by default --------- Co-authored-by: Escherichia <escherichia@charlotte> Co-authored-by: Son Ho <hosonmarc@gmail.com>
Diffstat (limited to '')
-rw-r--r--tests/src/rename_attribute.rs75
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/src/rename_attribute.rs b/tests/src/rename_attribute.rs
new file mode 100644
index 00000000..78765817
--- /dev/null
+++ b/tests/src/rename_attribute.rs
@@ -0,0 +1,75 @@
+//@ [fstar] aeneas-args=-decreases-clauses -split-files
+//@ [coq] aeneas-args=-use-fuel
+#![feature(register_tool)]
+#![register_tool(charon)]
+#![register_tool(aeneas)]
+
+#[charon::rename("BoolTest")]
+pub trait BoolTrait {
+ // Required method
+ #[charon::rename("getTest")]
+ fn get_bool(&self) -> bool;
+
+ // Provided method
+ #[charon::rename("retTest")]
+ fn ret_true(&self) -> bool {
+ true
+ }
+}
+
+#[charon::rename("BoolImpl")]
+impl BoolTrait for bool {
+ fn get_bool(&self) -> bool {
+ *self
+ }
+}
+
+#[charon::rename("BoolFn")]
+pub fn test_bool_trait<T>(x: bool) -> bool {
+ x.get_bool() && x.ret_true()
+}
+
+#[charon::rename("TypeTest")]
+type Test = i32;
+
+#[charon::rename("VariantsTest")]
+enum SimpleEnum {
+ #[charon::rename("Variant1")]
+ FirstVariant,
+ SecondVariant,
+ ThirdVariant,
+}
+
+#[charon::rename("StructTest")]
+struct Foo {
+ #[charon::rename("FieldTest")]
+ field1: u32,
+}
+
+#[charon::rename("Const_Test")]
+const C: u32 = 100 + 10 + 1;
+
+#[aeneas::rename("Const_Aeneas11")]
+const CA: u32 = 10 + 1;
+
+#[charon::rename("Factfn")]
+fn factorial(n: u64) -> u64 {
+ if n <= 1 {
+ 1
+ } else {
+ return n * factorial(n - 1);
+ }
+}
+
+#[charon::rename("No_borrows_sum")]
+pub fn sum(max: u32) -> u32 {
+ let mut i = 0;
+ let mut s = 0;
+ while i < max {
+ s += i;
+ i += 1;
+ }
+
+ s *= 2;
+ s
+}