diff options
Diffstat (limited to 'examples/03-inductive-data-types')
4 files changed, 51 insertions, 24 deletions
diff --git a/examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java b/examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java new file mode 100644 index 0000000..08cb75c --- /dev/null +++ b/examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java @@ -0,0 +1,17 @@ +package org.zwobble.example; + +import org.zwobble.example.types.arithmetic.Add; +import org.zwobble.example.types.arithmetic.Const; +import org.zwobble.example.types.arithmetic.Expression; + +public class Arithmetic { + public static int eval(Expression expression) { + return switch (expression) { + case Add(var left, var right) -> + eval(left) + eval(right); + + case Const(var value) -> + value; + }; + } +} diff --git a/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java b/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java index 5623af5..cd4fdd0 100644 --- a/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java +++ b/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java @@ -17,18 +17,8 @@ public class ArithmeticTests { new Const(52) ); - int result = eval(expression); + int result = Arithmetic.eval(expression); assertEquals(result, 141); } - - private int eval(Expression expression) { - return switch (expression) { - case Add(var left, var right) -> - eval(left) + eval(right); - - case Const(var value) -> - value; - }; - } } diff --git a/examples/03-inductive-data-types/output/rust/src/lib.rs b/examples/03-inductive-data-types/output/rust/src/lib.rs new file mode 100644 index 0000000..3265e69 --- /dev/null +++ b/examples/03-inductive-data-types/output/rust/src/lib.rs @@ -0,0 +1,33 @@ +mod arithmetic; + +use arithmetic::{Const, Expression}; + +fn eval(expression: &Expression) -> i32 { + match expression { + Expression::Add(add) => + eval(&add.left) + eval(&add.right), + + Expression::Const(Const { value }) => + *value, + } +} + +#[cfg(test)] +mod test { + use super::arithmetic::{Add, Const, Expression}; + + #[test] + fn eval() { + let expression: Expression = Add { + left: Add { + left: Const { value: 42 }.into(), + right: Const { value: 47 }.into(), + }.into(), + right: Const { value: 52 }.into(), + }.into(); + + let result = super::eval(&expression); + + assert_eq!(result, 141); + } +} diff --git a/examples/03-inductive-data-types/output/rust/src/main.rs b/examples/03-inductive-data-types/output/rust/src/main.rs deleted file mode 100644 index 61fd820..0000000 --- a/examples/03-inductive-data-types/output/rust/src/main.rs +++ /dev/null @@ -1,13 +0,0 @@ -mod arithmetic; - -use arithmetic::{Add, Const, Expression}; - -fn main() { - let expression: Expression = Add { - left: Add { - left: Const { value: 42 }.into(), - right: Const { value: 47 }.into(), - }.into(), - right: Const { value: 52 }.into(), - }.into(); -} |
