diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-14 19:01:50 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-14 19:01:50 +0100 |
| commit | 92bbc3595c39e964160660a2de9aa76b72ce727f (patch) | |
| tree | 00979e144541fd594145e52fc92874b244cd2352 /examples | |
| parent | 6194d284f5559acc5f23a402f577bac655878f92 (diff) | |
Convert Rust examples to use cargo test
Diffstat (limited to 'examples')
22 files changed, 210 insertions, 116 deletions
diff --git a/examples/01-struct/output/rust/src/lib.rs b/examples/01-struct/output/rust/src/lib.rs new file mode 100644 index 0000000..fb8a5b6 --- /dev/null +++ b/examples/01-struct/output/rust/src/lib.rs @@ -0,0 +1,15 @@ +mod point; + +#[cfg(test)] +mod test { + use super::point::Point; + + #[test] + fn point_fields() { + let point: Point = Point { x: 10, y: 25 }; + let x: i32 = point.x; + let y: i32 = point.y; + assert_eq!(x, 10); + assert_eq!(y, 25); + } +} diff --git a/examples/01-struct/output/rust/src/main.rs b/examples/01-struct/output/rust/src/main.rs deleted file mode 100644 index 0461817..0000000 --- a/examples/01-struct/output/rust/src/main.rs +++ /dev/null @@ -1,9 +0,0 @@ -mod point; - -use point::Point; - -fn main() { - let point: Point = Point { x: 10, y: 25 }; - let x: i32 = point.x; - let y: i32 = point.y; -} diff --git a/examples/02-sum/output/java/src/main/java/org/zwobble/example/Shapes.java b/examples/02-sum/output/java/src/main/java/org/zwobble/example/Shapes.java new file mode 100644 index 0000000..a6a468f --- /dev/null +++ b/examples/02-sum/output/java/src/main/java/org/zwobble/example/Shapes.java @@ -0,0 +1,17 @@ +package org.zwobble.example; + +import org.zwobble.example.types.shapes.Shape; +import org.zwobble.example.types.shapes.Rectangle; +import org.zwobble.example.types.shapes.Triangle; + +public class Shapes { + public static int area(Shape shape) { + return switch (shape) { + case Rectangle(var width, var height) -> + width * height; + + case Triangle(var width, var height) -> + width * height / 2; + }; + } +} diff --git a/examples/02-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java b/examples/02-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java index 2554ca5..893a544 100644 --- a/examples/02-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java +++ b/examples/02-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java @@ -10,24 +10,14 @@ public class ShapesTests { @Test public void rectangle() { Shape rectangle = new Rectangle(10, 25); - int area = area(rectangle); + int area = Shapes.area(rectangle); assertEquals(area, 250); } @Test public void triangle() { Shape triangle = new Triangle(10, 25); - int area = area(triangle); + int area = Shapes.area(triangle); assertEquals(area, 125); } - - private static int area(Shape shape) { - return switch (shape) { - case Rectangle(var width, var height) -> - width * height; - - case Triangle(var width, var height) -> - width * height / 2; - }; - } } diff --git a/examples/02-sum/output/rust/src/lib.rs b/examples/02-sum/output/rust/src/lib.rs new file mode 100644 index 0000000..f961002 --- /dev/null +++ b/examples/02-sum/output/rust/src/lib.rs @@ -0,0 +1,29 @@ +mod shapes; + +use shapes::{Rectangle, Shape, Triangle}; + +fn area(shape: &Shape) -> i32 { + match shape { + Shape::Rectangle(rectangle) => rectangle.width * rectangle.height, + Shape::Triangle(triangle) => triangle.width * triangle.height / 2, + } +} + +#[cfg(test)] +mod test { + use super::shapes::{Rectangle, Shape, Triangle}; + + #[test] + fn rectangle() { + let rectangle = Shape::Rectangle(Rectangle { width: 10, height: 25 }); + let area = super::area(&rectangle); + assert_eq!(area, 250); + } + + #[test] + fn triangle() { + let triangle = Shape::Triangle(Triangle { width: 10, height: 25 }); + let area = super::area(&triangle); + assert_eq!(area, 125); + } +} diff --git a/examples/02-sum/output/rust/src/main.rs b/examples/02-sum/output/rust/src/main.rs deleted file mode 100644 index 010ea2a..0000000 --- a/examples/02-sum/output/rust/src/main.rs +++ /dev/null @@ -1,16 +0,0 @@ -mod shapes; - -use shapes::{Rectangle, Shape, Triangle}; - -fn main() { - let shape = create_shape(); - - let area = match shape { - Shape::Rectangle(rectangle) => rectangle.width * rectangle.height, - Shape::Triangle(triangle) => triangle.width * triangle.height / 2, - }; -} - -fn create_shape() -> Shape { - Shape::Rectangle(Rectangle { width: 10, height: 25 }) -} 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(); -} diff --git a/examples/04-enum/output/java/src/main/java/org/zwobble/example/Numbers.java b/examples/04-enum/output/java/src/main/java/org/zwobble/example/Numbers.java new file mode 100644 index 0000000..fc17869 --- /dev/null +++ b/examples/04-enum/output/java/src/main/java/org/zwobble/example/Numbers.java @@ -0,0 +1,13 @@ +package org.zwobble.example; + +import org.zwobble.example.types.numbers.SmallNumber; + +public class Numbers { + public static int eval(SmallNumber smallNumber) { + return switch (smallNumber) { + case ZERO -> 0; + case ONE -> 1; + case TWO -> 2; + }; + } +} diff --git a/examples/04-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java b/examples/04-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java index 95b85a4..141d5d1 100644 --- a/examples/04-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java +++ b/examples/04-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java @@ -7,16 +7,8 @@ import org.zwobble.example.types.numbers.SmallNumber; public class NumbersTests { @Test public void canEvalSmallNumbers() { - assertEquals(eval(SmallNumber.ZERO), 0); - assertEquals(eval(SmallNumber.ONE), 1); - assertEquals(eval(SmallNumber.TWO), 2); - } - - private int eval(SmallNumber smallNumber) { - return switch (smallNumber) { - case ZERO -> 0; - case ONE -> 1; - case TWO -> 2; - }; + assertEquals(Numbers.eval(SmallNumber.ZERO), 0); + assertEquals(Numbers.eval(SmallNumber.ONE), 1); + assertEquals(Numbers.eval(SmallNumber.TWO), 2); } } diff --git a/examples/04-enum/output/rust/src/lib.rs b/examples/04-enum/output/rust/src/lib.rs new file mode 100644 index 0000000..ae0b67c --- /dev/null +++ b/examples/04-enum/output/rust/src/lib.rs @@ -0,0 +1,23 @@ +mod numbers; + +use numbers::SmallNumber; + +fn eval(small_number: SmallNumber) -> i32 { + match small_number { + SmallNumber::Zero => 0, + SmallNumber::One => 1, + SmallNumber::Two => 2, + } +} + +#[cfg(test)] +mod test { + use super::numbers::SmallNumber; + + #[test] + fn can_eval_small_numbers() { + assert_eq!(super::eval(SmallNumber::Zero), 0); + assert_eq!(super::eval(SmallNumber::One), 1); + assert_eq!(super::eval(SmallNumber::Two), 2); + } +} diff --git a/examples/04-enum/output/rust/src/main.rs b/examples/04-enum/output/rust/src/main.rs deleted file mode 100644 index 2201dcc..0000000 --- a/examples/04-enum/output/rust/src/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod numbers; - -use numbers::SmallNumber; - -fn main() { - let small_number = SmallNumber::One; -} diff --git a/examples/05-list/output/rust/src/lib.rs b/examples/05-list/output/rust/src/lib.rs new file mode 100644 index 0000000..907ab8b --- /dev/null +++ b/examples/05-list/output/rust/src/lib.rs @@ -0,0 +1,16 @@ +mod point; + +#[cfg(test)] +mod test { + use super::point::{Path, Point}; + + #[test] + fn can_create_path_directly() { + let path: Path = Path { + points: vec![ + Point { x: 10, y: 25 }, + Point { x: 25, y: 10 } + ], + }; + } +} diff --git a/examples/05-list/output/rust/src/main.rs b/examples/05-list/output/rust/src/main.rs deleted file mode 100644 index 3c636af..0000000 --- a/examples/05-list/output/rust/src/main.rs +++ /dev/null @@ -1,12 +0,0 @@ -mod point; - -use point::{Path, Point}; - -fn main() { - let path: Path = Path { - points: vec![ - Point { x: 10, y: 25 }, - Point { x: 25, y: 10 } - ], - }; -} diff --git a/examples/06-native-type/output/rust/src/lib.rs b/examples/06-native-type/output/rust/src/lib.rs new file mode 100644 index 0000000..1179cff --- /dev/null +++ b/examples/06-native-type/output/rust/src/lib.rs @@ -0,0 +1,11 @@ +mod point; + +#[cfg(test)] +mod test { + use super::point::{Line, Point}; + + #[test] + fn can_use_native_types() { + let line = Line { start: Point(10, 25), end: Point(25, 10) }; + } +} diff --git a/examples/06-native-type/output/rust/src/main.rs b/examples/06-native-type/output/rust/src/main.rs deleted file mode 100644 index 4bd1cd0..0000000 --- a/examples/06-native-type/output/rust/src/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod point; - -use point::{Line, Point}; - -fn main() { - let line = Line { start: Point(10, 25), end: Point(25, 10) }; -} diff --git a/examples/07-native-type-custom-config/output/rust/src/main.rs b/examples/07-native-type-custom-config/output/rust/src/main.rs index af7be7f..164fa14 100644 --- a/examples/07-native-type-custom-config/output/rust/src/main.rs +++ b/examples/07-native-type-custom-config/output/rust/src/main.rs @@ -1,9 +1,13 @@ mod point; -use point::Line; - struct Point(i32, i32); -fn main() { - let line = Line { start: Point(10, 25), end: Point(25, 10) }; +#[cfg(test)] +mod test { + use super::{Point, point::Line}; + + #[test] + fn can_use_native_types() { + let line = Line { start: Point(10, 25), end: Point(25, 10) }; + } } diff --git a/examples/08-custom-code/output/rust/src/lib.rs b/examples/08-custom-code/output/rust/src/lib.rs new file mode 100644 index 0000000..1825d72 --- /dev/null +++ b/examples/08-custom-code/output/rust/src/lib.rs @@ -0,0 +1,12 @@ +mod shapes; + +#[cfg(test)] +mod test { + use super::shapes::Square; + + #[test] + fn can_use_custom_code() { + let square = Square { width: 10 }; + assert_eq!(square.area(), 100); + } +} diff --git a/examples/08-custom-code/output/rust/src/main.rs b/examples/08-custom-code/output/rust/src/main.rs deleted file mode 100644 index e30443e..0000000 --- a/examples/08-custom-code/output/rust/src/main.rs +++ /dev/null @@ -1,8 +0,0 @@ -mod shapes; - -use shapes::Square; - -fn main() { - let square = Square { width: 10 }; - assert!(square.area() == 100); -} diff --git a/examples/09-imports/output/rust/src/main.rs b/examples/09-imports/output/rust/src/main.rs index ee3d685..ffbcbf4 100644 --- a/examples/09-imports/output/rust/src/main.rs +++ b/examples/09-imports/output/rust/src/main.rs @@ -1,11 +1,15 @@ mod line; mod point; -use line::Line; -use point::Point; +#[cfg(test)] +mod test { + use super::line::Line; + use super::point::Point; -fn main() { - let start = Point { x: 10, y: 25 }; - let end = Point { x: 10, y: 25 }; - let line = Line { start, end }; + #[test] + fn can_construct_line() { + let start = Point { x: 10, y: 25 }; + let end = Point { x: 10, y: 25 }; + let line = Line { start, end }; + } } |
