[
{
"src": "overview/hello_world",
"lang": "roto",
"code": "fn main() {\n print(\"Hello, world!\");\n}",
"source": "source/overview/hello_world.rst",
"line": 6,
"testoutput": "Hello, world!\n",
"mode": "run"
},
{
"src": "overview/hello_world",
"lang": "roto",
"code": "fn main() {\n print(5);\n}",
"source": "source/overview/hello_world.rst",
"line": 36,
"testoutput": "",
"mode": "error"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "// this is a comment\n",
"source": "source/reference/language_reference.md",
"line": 14,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "// one comment line\n// another comment line\n",
"source": "source/reference/language_reference.md",
"line": 21,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "fn greater_than_square(x: i32, y: i32) -> bool {\n let y_squared = y * y;\n x > y_squared\n}\n",
"source": "source/reference/language_reference.md",
"line": 89,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let x = 0;\nx = x + 1;\n",
"source": "source/reference/language_reference.md",
"line": 99,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let x: u32 = 0;\n",
"source": "source/reference/language_reference.md",
"line": 109,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let x = true;\nif x {\n let y = false;\n print(f\"{y}\"); // ok!\n // y is implicitly dropped here\n}\nprint(f\"{x}\"); // ok!\nprint(f\"{y}\"); // this is not possible: y is no longer in scope!\n",
"source": "source/reference/language_reference.md",
"line": 119,
"testoutput": "",
"mode": "error"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let character_a: char = 'a';\n",
"source": "source/reference/language_reference.md",
"line": 220,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let s = \"This is a string!\";\n",
"source": "source/reference/language_reference.md",
"line": 229,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let s = \"race\" + \"car\"; // yields the string \"racecar\"\n",
"source": "source/reference/language_reference.md",
"line": 235,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let x = 10;\nprint(f\"x is {x}\");\n",
"source": "source/reference/language_reference.md",
"line": 275,
"testoutput": "x is 10\n",
"mode": "run"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let x = 10;\nprint(f\"Twice x is {2 * x}\");\n\nprint(f\"x is {if x > 100 {\n \"big\"\n} else {\n \"small\"\n}}\");\n",
"source": "source/reference/language_reference.md",
"line": 287,
"testoutput": "Twice x is 20\nx is small\n",
"mode": "run"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "print(f\"x is {{ x }}\");\n",
"source": "source/reference/language_reference.md",
"line": 306,
"testoutput": "x is { x }\n",
"mode": "run"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let my_list: List[i32] = [1, 2, 3];\nlet first: i32? = my_list.get(0);\nmatch first {\n Some(first) => print(f\"First element was: {first}\"),\n None => print(\"No elements!\"),\n}\n",
"source": "source/reference/language_reference.md",
"line": 322,
"testoutput": "First element was: 1\n",
"mode": "run"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let a = [\"one\", \"two\", \"three\"];\nlet b = [\"four\", \"five\", \"six\"];\nlet concatenated = a + b;\n",
"source": "source/reference/language_reference.md",
"line": 337,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let foo = { bar: 5, baz: 10 };\n",
"source": "source/reference/language_reference.md",
"line": 389,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "if x {\n { foo: 5, bar: 10 }\n} else {\n { foo: 5 } // error!\n}\n",
"source": "source/reference/language_reference.md",
"line": 398,
"testoutput": "",
"mode": "error"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "filtermap example_filter_map() {\n let x = { foo: 5 };\n accept x.foo\n}\n",
"source": "source/reference/language_reference.md",
"line": 412,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let x = { foo: 5 };\nx.foo = 6;\n",
"source": "source/reference/language_reference.md",
"line": 421,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "// A `Number` enum type that has the constructors `Int`, `Float` and `Nan`.\nenum Number {\n Int(i32),\n Float(f32),\n Nan,\n}\n\nfn use_number() {\n let x = Number.Int(10);\n let y = Number.Float(21.5);\n let z = Number.Nan;\n\n match x {\n Int(i) => print(f\"int: {i}\"),\n Float(f) => print(f\"float: {f}\"),\n Nan => print(f\"nan!\"),\n }\n}\n",
"source": "source/reference/language_reference.md",
"line": 464,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "enum Either[L, R] {\n Left(L),\n Right(R),\n}\n\nfn to_string(x: Either[i32, String]) -> String {\n match x {\n Left(i) => f\"{i}\",\n Right(s) => s,\n }\n}\n",
"source": "source/reference/language_reference.md",
"line": 487,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "1 + 2 * 3; // evaluates to 7\n",
"source": "source/reference/language_reference.md",
"line": 536,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "1 + (2 * 3); // evaluates to 7\n",
"source": "source/reference/language_reference.md",
"line": 542,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "(1 + 2) * 3; // evaluates to 9\n",
"source": "source/reference/language_reference.md",
"line": 548,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let x = Some(10);\nmatch x {\n None => print(\"x is None\"),\n Some(i) => {\n print(\"x is Some\");\n print(f\"x is {i}\");\n }\n}\n",
"source": "source/reference/language_reference.md",
"line": 678,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let i = 0;\nwhile i < 10 {\n i = i + 1;\n}\n",
"source": "source/reference/language_reference.md",
"line": 702,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "let total = 0;\nfor x in [1, 2, 3, 4] {\n total = total + x;\n}\n",
"source": "source/reference/language_reference.md",
"line": 719,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "fn add_one(x: u64) -> u64 {\n x + 1\n}\n",
"source": "source/reference/language_reference.md",
"line": 739,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "fn add_one(x: u64) -> u64 {\n return x + 1;\n}\n",
"source": "source/reference/language_reference.md",
"line": 757,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "fn subtract_one(x: u64) -> u64 {\n if x == 0 {\n return 0;\n }\n x - 1\n}\n",
"source": "source/reference/language_reference.md",
"line": 766,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "filtermap reject_zeros(input: IpAddr) {\n let zeros = 0.0.0.0;\n if input == zeros {\n reject\n } else {\n accept\n }\n}\n",
"source": "source/reference/language_reference.md",
"line": 815,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "filtermap small_enough(x: i32) {\n if x < 10 {\n accept x\n } else {\n reject \"value was too big!\"\n }\n}\n",
"source": "source/reference/language_reference.md",
"line": 828,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "fn small_enough(x: i32) -> Verdict[i32, String] {\n if x < 10 {\n return Verdict.Accept(x)\n } else {\n return Verdict.Reject(\"value was too big!\")\n }\n}\n",
"source": "source/reference/language_reference.md",
"line": 840,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "fn add(x: u32, y: u32) -> u32 {\n x + y\n}\n\ntest test_add_function {\n if add(10, 20) == 30 {\n accept\n } else {\n reject\n }\n}\n",
"source": "source/reference/language_reference.md",
"line": 866,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "const FOO: u32 = 10;\n",
"source": "source/reference/language_reference.md",
"line": 892,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/language_reference",
"lang": "roto",
"code": "const FOO: u32 = BAR;\nconst BAR: u32 = FOO;\n",
"source": "source/reference/language_reference.md",
"line": 913,
"testoutput": "",
"mode": "error"
},
{
"src": "reference/std/Asn/index",
"lang": "roto",
"code": "let a = AS0;\nlet b = AS1010;\nlet c = AS4294967295;\n",
"source": "source/reference/std/Asn/index.md",
"line": 11,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/IpAddr/index",
"lang": "roto",
"code": "// IPv4 examples\nlet a = 127.0.0.1;\nlet b = 0.0.0.0;\nlet c = 255.255.255.255;\n\n// IPv6 examples\nlet d = 0:0:0:0:0:0:0:1;\nlet e = ::1;\nlet f = ::;\n",
"source": "source/reference/std/IpAddr/index.md",
"line": 9,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/IpAddr/index",
"lang": "roto",
"code": "let a = 192.0.0.0 == 192.0.0.0; // -> true\nlet b = ::0 == ::0; // -> true\nlet c = 192.0.0.0 == 192.0.0.1; // -> false\nlet d = 0.0.0.0 == 0::0; // -> false\n\n// or equivalently:\nlet e = 192.0.0.0.eq(192.0.0.0); // -> true\n",
"source": "source/reference/std/IpAddr/index.md",
"line": 39,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/IpAddr/index",
"lang": "roto",
"code": "let a = 1.1.1.1.is_ipv4(); // -> true\nlet b = ::.is_ipv4(); // -> false\n",
"source": "source/reference/std/IpAddr/index.md",
"line": 53,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/IpAddr/index",
"lang": "roto",
"code": "let a = 1.1.1.1.is_ipv6(); // -> false\nlet b = ::.is_ipv6(); // -> true\n",
"source": "source/reference/std/IpAddr/index.md",
"line": 62,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/Prefix/index",
"lang": "roto",
"code": "let a = 1.1.1.0 / 8;\nlet b = 192.0.0.0 / 24;\n",
"source": "source/reference/std/Prefix/index.md",
"line": 9,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/Prefix/index",
"lang": "roto",
"code": "let a = Prefix.new(192.169.0.0, 16);\n\n// or equivalently\nlet b = 192.169.0.0 / 16;\n",
"source": "source/reference/std/Prefix/index.md",
"line": 43,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"Hello!\";\n",
"source": "source/reference/std/String/index.md",
"line": 8,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"hello\".append(\" \").append(\"world\"); // -> \"hello world\"\n",
"source": "source/reference/std/String/index.md",
"line": 21,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"haystack\".contains(\"hay\"); // -> true\nlet b = \"haystack\".contains(\"corn\"); // -> false\n",
"source": "source/reference/std/String/index.md",
"line": 37,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"haystack\".ends_with(\"stack\"); // -> true\nlet b = \"haystack\".ends_with(\"black\"); // -> false\n",
"source": "source/reference/std/String/index.md",
"line": 46,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = String.from_chars(['h', 'e', 'l', 'l', 'o']); // -> \"hello\"\n",
"source": "source/reference/std/String/index.md",
"line": 59,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"ha\".repeat(6); // -> \"hahahahahaha\"\n",
"source": "source/reference/std/String/index.md",
"line": 71,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"In rust we trust\".replace(\"rust\", \"roto\"); // -> \"In roto we troto\"\n",
"source": "source/reference/std/String/index.md",
"line": 79,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"Rust!Roto!String\".rsplitn(2, \"!\");\n// -> [\"String\", \"Rust!Roto\"]\n",
"source": "source/reference/std/String/index.md",
"line": 91,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"one, two, three\".split(\", \"); // -> [\"one\", \"two\", \"three\"]\n",
"source": "source/reference/std/String/index.md",
"line": 100,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"Rust!Roto!String\".splitn(2, \"!\");\n// -> [\"Rust\", \"Roto!String\"]\n",
"source": "source/reference/std/String/index.md",
"line": 111,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"haystack\".starts_with(\"hay\"); // -> true\nlet b = \"haystack\".starts_with(\"trees\"); // -> false\n",
"source": "source/reference/std/String/index.md",
"line": 120,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"RustRoto!\".strip_prefix(\"Rust\"); // -> \"Roto!\"\n",
"source": "source/reference/std/String/index.md",
"line": 131,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"Roto!Rust\".strip_suffix(\"Rust\"); // -> \"Roto!\"\n",
"source": "source/reference/std/String/index.md",
"line": 141,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"LOUD\".to_lowercase(); // -> \"loud\"\n",
"source": "source/reference/std/String/index.md",
"line": 149,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \"quiet\".to_uppercase(); // -> \"QUIET\"\n",
"source": "source/reference/std/String/index.md",
"line": 161,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \" Roto! \".trim(); // -> \"Roto!\"\n",
"source": "source/reference/std/String/index.md",
"line": 170,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \" Roto! \".trim_end(); // -> \" Roto!\"\n",
"source": "source/reference/std/String/index.md",
"line": 178,
"testoutput": "",
"mode": "check"
},
{
"src": "reference/std/String/index",
"lang": "roto",
"code": "let a = \" Roto! \".trim_start(); // -> \"Roto! \"\n",
"source": "source/reference/std/String/index.md",
"line": 186,
"testoutput": "",
"mode": "check"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n print(\"Hello, World!\");\n}\n",
"source": "source/writing/basics.md",
"line": 11,
"testoutput": "Hello, World!\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n // Create a variable with the inferred type String\n let first_name = \"John\";\n print(\"Hello, \" + first_name);\n\n // Create a variable with a type annotation\n let last_name: String = \"Doe\";\n print(\"Bye, \" + first_name + \" \" + last_name + \"!\");\n}\n",
"source": "source/writing/basics.md",
"line": 30,
"testoutput": "Hello, John\nBye, John Doe!\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n let first_name = \"John\";\n let last_name = \"Doe\";\n print(f\"Hello, {first_name} {last_name}!\");\n}\n",
"source": "source/writing/basics.md",
"line": 55,
"testoutput": "Hello, John Doe!\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n let name = \"John\";\n print(f\"Hello, {name.to_uppercase()}\");\n}\n",
"source": "source/writing/basics.md",
"line": 71,
"testoutput": "Hello, JOHN\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n // We can specify the type to get a specific integer type\n let a: u8 = 2 + 1;\n print(f\"2 + 1 = {a}\");\n\n // If we don't specify the type we get i32\n let b = -10 + 3;\n print(f\"-10 + 3 = {b}\");\n\n let c = 2 * 3;\n print(f\"2 * 3 = {c}\");\n\n let d = 20 / 5;\n print(f\"20 / 5 = {d}\");\n\n let e = 23 % 5;\n print(f\"23 % 5 = {e}\");\n\n // Regular order of operations applies\n let f = 1 + 4 * 5;\n print(f\"1 + 4 * 5 = {f}\");\n}\n",
"source": "source/writing/basics.md",
"line": 110,
"testoutput": "2 + 1 = 3\n-10 + 3 = -7\n2 * 3 = 6\n20 / 5 = 4\n23 % 5 = 3\n1 + 4 * 5 = 21\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n let a: u8 = 5;\n let b: u32 = 10;\n\n let c = a + b; // error!\n}\n",
"source": "source/writing/basics.md",
"line": 148,
"testoutput": "",
"mode": "error"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n // We can specify the type to get a specific integer type\n let a: f32 = 2.0 + 1.0; // -> 3.0\n print(f\"2.0 + 1.0 = {a}\");\n\n // We always have to write the period for floating point numbers\n let b: f32 = 2. + 1.; // -> 3.0\n print(f\"2. + 1. = {b}\");\n\n // If we don't specify the type we get f64\n let c = -12.3 + 4.5; // -> -7.8\n print(f\"-12.3 + 4.5 = {c}\");\n\n let d = 2.0 * 3.5; // -> 7.0\n print(f\"2.0 * 3.5 = {d}\");\n\n let e = 20.0 / 5.0; // -> 4.0\n print(f\"20.0 / 5.0 = {e}\");\n\n // Regular order of operations applies\n let f = 1.0 + 4.0 * 5.0; // -> 21.0\n print(f\"1.0 + 4.0 * 5.0 = {f}\");\n}\n",
"source": "source/writing/basics.md",
"line": 166,
"testoutput": "2.0 + 1.0 = 3\n2. + 1. = 3\n-12.3 + 4.5 = -7.800000000000001\n2.0 * 3.5 = 7\n20.0 / 5.0 = 4\n1.0 + 4.0 * 5.0 = 21\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n let a = !false;\n print(f\"{a}\");\n}\n",
"source": "source/writing/basics.md",
"line": 223,
"testoutput": "true\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n let x = 5 == 5;\n let y = \"hello\" == \"hello\";\n let z = true == true;\n print(f\"{x && y && z}\");\n}\n",
"source": "source/writing/basics.md",
"line": 242,
"testoutput": "true\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n let x = 5 > 3;\n print(f\"{x}\");\n}\n",
"source": "source/writing/basics.md",
"line": 270,
"testoutput": "true\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n let x: List[i32] = [1, 2, 4];\n let len = x.len();\n let contains_2 = x.contains(2);\n let contains_3 = x.contains(3);\n print(f\"length of x: {len}\");\n print(f\"x contains 2: {contains_2}\");\n print(f\"x contains 3: {contains_3}\");\n}\n",
"source": "source/writing/basics.md",
"line": 299,
"testoutput": "length of x: 3\nx contains 2: true\nx contains 3: false\n",
"mode": "run"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n let x = [1, \"hello!\"];\n}\n",
"source": "source/writing/basics.md",
"line": 322,
"testoutput": "",
"mode": "error"
},
{
"src": "writing/basics",
"lang": "roto",
"code": "fn main() {\n let x = [1, 2, 3];\n let y = [4, 5, 6];\n let z = x + y;\n\n let contains_2 = z.contains(2);\n let contains_5 = z.contains(5);\n print(f\"z contains 2: {contains_2}\");\n print(f\"z contains 5: {contains_5}\");\n}\n",
"source": "source/writing/basics.md",
"line": 331,
"testoutput": "z contains 2: true\nz contains 5: true\n",
"mode": "run"
},
{
"src": "writing/control_flow",
"lang": "roto",
"code": "fn main() {\n let x = 100;\n if x % 2 == 0 {\n print(\"x is even\");\n } else {\n print(\"x is odd\");\n }\n}\n",
"source": "source/writing/control_flow.md",
"line": 14,
"testoutput": "x is even\n",
"mode": "run"
},
{
"src": "writing/control_flow",
"lang": "roto",
"code": "fn main() {\n let x = 100;\n let sign = if x > 0 {\n print(\"x is positive\");\n 1 // <- No semicolon!\n } else {\n print(\"x is negative\");\n -1 // <- No semicolon!\n };\n print(f\"{sign}\");\n}\n",
"source": "source/writing/control_flow.md",
"line": 33,
"testoutput": "x is positive\n1\n",
"mode": "run"
},
{
"src": "writing/control_flow",
"lang": "roto",
"code": "fn main() {\n if true {\n let x = 10;\n print(f\"{x}\"); // This is fine!\n }\n print(f\"{x}\"); // This errors during type checking as x no longer exists here!\n}\n",
"source": "source/writing/control_flow.md",
"line": 57,
"testoutput": "",
"mode": "error"
},
{
"src": "writing/control_flow",
"lang": "roto",
"code": "// Euclidean algorithm for greatest common divisor\nfn main() {\n let a_initial = 125;\n let b_initial = 50;\n\n let a = a_initial;\n let b = b_initial;\n while b != 0 {\n let t = b;\n b = a % b;\n a = t;\n }\n\n print(f\"gcd({a_initial}, {b_initial}) = {a}\")\n}\n",
"source": "source/writing/control_flow.md",
"line": 80,
"testoutput": "gcd(125, 50) = 25\n",
"mode": "run"
},
{
"src": "writing/control_flow",
"lang": "roto",
"code": "fn main() {\n for x in [10, 20, 30] {\n let squared = x * x;\n print(f\"{x} squared is {squared}\");\n }\n}\n",
"source": "source/writing/control_flow.md",
"line": 111,
"testoutput": "10 squared is 100\n20 squared is 400\n30 squared is 900\n",
"mode": "run"
},
{
"src": "writing/data_types",
"lang": "roto",
"code": "fn double_both(a: {x: f64, y: f64}) -> {x: f64, y: f64} {\n {\n x: 2.0 * a.x,\n y: 2.0 * a.y,\n }\n}\n\nfn main() {\n let one = { x: 10.0, y: 20.0 };\n let two = double_both(one);\n print(f\"two.x = {two.x}\");\n print(f\"two.y = {two.y}\");\n}\n",
"source": "source/writing/data_types.md",
"line": 20,
"testoutput": "two.x = 20\ntwo.y = 40\n",
"mode": "run"
},
{
"src": "writing/data_types",
"lang": "roto",
"code": "record Vec2 {\n x: f64,\n y: f64,\n}\n\n\nfn double_both(a: Vec2) -> Vec2 {\n Vec2 {\n x: 2.0 * a.x,\n y: 2.0 * a.y,\n }\n}\n\nfn main() {\n let one = { x: 10.0, y: 20.0 };\n let two = double_both(one);\n print(f\"two.x = {two.x}\");\n print(f\"two.y = {two.y}\");\n}\n",
"source": "source/writing/data_types.md",
"line": 53,
"testoutput": "",
"mode": "check"
},
{
"src": "writing/data_types",
"lang": "roto",
"code": "enum Alignment {\n Left,\n Center,\n Right,\n}\n\nfn align(x: String, size: u64, alignment: Alignment) -> String {\n let x_size = x.chars().len();\n if size <= x_size {\n return x;\n }\n\n let pad = size - x_size;\n let left = 0;\n let right = 0;\n match alignment {\n Left => {\n right = pad;\n }\n Right => {\n left = pad;\n }\n Center => {\n left = pad / 2;\n right = pad / 2 + pad % 2;\n }\n }\n\n let left_str = \"_\".repeat(left);\n let right_str = \"_\".repeat(right);\n f\"{left_str}{x}{right_str}\"\n}\n\nfn main() {\n print(align(\"Hey!\", 10, Alignment.Left));\n print(align(\"Hey!\", 10, Alignment.Right));\n print(align(\"Hey!\", 10, Alignment.Center));\n print(align(\"Ho!\", 10, Alignment.Left));\n print(align(\"Ho!\", 10, Alignment.Right));\n print(align(\"Ho!\", 10, Alignment.Center));\n}\n",
"source": "source/writing/data_types.md",
"line": 96,
"testoutput": "Hey!______\n______Hey!\n___Hey!___\nHo!_______\n_______Ho!\n___Ho!____\n",
"mode": "run"
},
{
"src": "writing/data_types",
"lang": "roto",
"code": "enum Range {\n Full,\n From(i64),\n Until(i64),\n Between(i64, i64),\n}\n\nfn contains(range: Range, x: i64) -> bool {\n match range {\n Full => true,\n From(a) => x >= a,\n Until(a) => x <= a,\n Between(a, b) => x >= a && x <= b,\n }\n} \n\nfn main() {\n let a = contains(Range.Full, 5);\n let b = contains(Range.From(6), 5);\n let c = contains(Range.Until(7), 5);\n let d = contains(Range.Between(6, 10), 5);\n print(f\"a = {a}, b = {b}, c = {c}, d = {d}\");\n}\n",
"source": "source/writing/data_types.md",
"line": 156,
"testoutput": "a = true, b = false, c = true, d = false\n",
"mode": "run"
},
{
"src": "writing/functions",
"lang": "roto",
"code": "fn double(x: u32) -> u32 {\n 2 * x // <- no semicolon!\n}\n\nfn triple(x: u32) -> u32 {\n return 3 * x;\n}\n\nfn main() {\n let doubled = double(14);\n print(f\"double(14) = {doubled}\");\n\n let tripled = triple(14);\n print(f\"triple(14) = {tripled}\");\n}\n",
"source": "source/writing/functions.md",
"line": 16,
"testoutput": "double(14) = 28\ntriple(14) = 42\n",
"mode": "run"
},
{
"src": "writing/functions",
"lang": "roto",
"code": "fn factorial(n: u64) -> u64 {\n if n == 0 {\n 1\n } else {\n n * factorial(n - 1)\n }\n}\n\nfn main() {\n let res = factorial(5);\n print(f\"factorial(5) = {res}\");\n}\n",
"source": "source/writing/functions.md",
"line": 49,
"testoutput": "factorial(5) = 120\n",
"mode": "run"
},
{
"src": "writing/introduction",
"lang": "roto",
"code": "fn main() {\n // your code goes here\n}\n",
"source": "source/writing/introduction.md",
"line": 27,
"testoutput": "",
"mode": "check"
}
]