From ba7bd5b87f441620e13cff36f51c5e9f6fa068d3 Mon Sep 17 00:00:00 2001 From: SimonFJ20 Date: Thu, 21 Nov 2024 16:16:30 +0100 Subject: [PATCH] add surveys --- surveys/code_coverage/.gitignore | 1 + surveys/code_coverage/README.md | 20 ++++++++ surveys/code_coverage/deno.jsonc | 8 ++++ surveys/code_coverage/deno.lock | 18 +++++++ surveys/code_coverage/program_1.ts | 50 ++++++++++++++++++++ surveys/code_coverage/program_1_test.ts | 13 +++++ surveys/code_coverage/program_2.ts | 45 ++++++++++++++++++ surveys/code_coverage/program_2_test.ts | 11 +++++ surveys/code_coverage/survey.ods | Bin 0 -> 18380 bytes surveys/flame_graph/README.md | 38 +++++++++++++++ surveys/flame_graph/program_flame_graph.png | Bin 0 -> 5070 bytes surveys/flame_graph/survey.ods | Bin 0 -> 21592 bytes web/example.slg | 14 ++++++ 13 files changed, 218 insertions(+) create mode 100644 surveys/code_coverage/.gitignore create mode 100644 surveys/code_coverage/README.md create mode 100644 surveys/code_coverage/deno.jsonc create mode 100644 surveys/code_coverage/deno.lock create mode 100644 surveys/code_coverage/program_1.ts create mode 100644 surveys/code_coverage/program_1_test.ts create mode 100644 surveys/code_coverage/program_2.ts create mode 100644 surveys/code_coverage/program_2_test.ts create mode 100644 surveys/code_coverage/survey.ods create mode 100644 surveys/flame_graph/README.md create mode 100644 surveys/flame_graph/program_flame_graph.png create mode 100644 surveys/flame_graph/survey.ods create mode 100644 web/example.slg diff --git a/surveys/code_coverage/.gitignore b/surveys/code_coverage/.gitignore new file mode 100644 index 0000000..404abb2 --- /dev/null +++ b/surveys/code_coverage/.gitignore @@ -0,0 +1 @@ +coverage/ diff --git a/surveys/code_coverage/README.md b/surveys/code_coverage/README.md new file mode 100644 index 0000000..12edb8d --- /dev/null +++ b/surveys/code_coverage/README.md @@ -0,0 +1,20 @@ +# Code coverage survery + +## Test + +``` +deno task test-coverage +``` + +## Instructions + +Write 1) a test inside `program_1_test.ts`, testing `playerFromUnknown` and 2) a test inside `program_2_test.ts`, testing `stringToInt`. The goal should be to __test as much as the code as possible__, meaning every branch and every line of code should be tested. + +The tests are done, when the participant is satisfied (or the time is up). Afterward, generate a coverage report using the following command. + +```sh +deno task test-coverage +``` + +Note down the branch and line coverage percentages of each file. + diff --git a/surveys/code_coverage/deno.jsonc b/surveys/code_coverage/deno.jsonc new file mode 100644 index 0000000..7aac543 --- /dev/null +++ b/surveys/code_coverage/deno.jsonc @@ -0,0 +1,8 @@ +{ + "fmt": { + "indentWidth": 4 + }, + "tasks": { + "test-coverage": "deno test --coverage && deno coverage coverage/ && deno coverage coverage/ --html && firefox --file coverage/html/index.html" + } +} diff --git a/surveys/code_coverage/deno.lock b/surveys/code_coverage/deno.lock new file mode 100644 index 0000000..b742530 --- /dev/null +++ b/surveys/code_coverage/deno.lock @@ -0,0 +1,18 @@ +{ + "version": "4", + "specifiers": { + "jsr:@std/assert@*": "1.0.8", + "jsr:@std/internal@^1.0.5": "1.0.5" + }, + "jsr": { + "@std/assert@1.0.8": { + "integrity": "ebe0bd7eb488ee39686f77003992f389a06c3da1bbd8022184804852b2fa641b", + "dependencies": [ + "jsr:@std/internal" + ] + }, + "@std/internal@1.0.5": { + "integrity": "54a546004f769c1ac9e025abd15a76b6671ddc9687e2313b67376125650dc7ba" + } + } +} diff --git a/surveys/code_coverage/program_1.ts b/surveys/code_coverage/program_1.ts new file mode 100644 index 0000000..97d21ae --- /dev/null +++ b/surveys/code_coverage/program_1.ts @@ -0,0 +1,50 @@ +export type Player = { + username: string; + level: number; +}; + +export type Result = { ok: true; value: T } | { ok: false; error: string }; + +export function playerFromUnknown(input: unknown): Result { + if (input === undefined) { + return { ok: false, error: "no input" }; + } + if (input === null) { + return { ok: false, error: "no input" }; + } + if (typeof input === "string") { + if (!/^[\d\w(:?\\\-)]+\-\d+$/.test(input)) { + return { ok: false, error: "malformed player" }; + } + const splits = input.split("-"); + let username = splits[0]; + if (username.includes("\\-")) { + username = username.replaceAll("\\-", "-"); + } + if (splits[1].startsWith("0") && splits[1].length >= 2) { + return { ok: false, error: "malformed player" }; + } + const level = parseInt(splits[1]); + return { ok: true, value: { username, level } }; + } else if (typeof input === "object") { + if (Object.keys(input).length < 2) { + return { ok: false, error: "malformed player" }; + } + if (Object.keys(input).length > 2) { + return { ok: false, error: "too much information" }; + } + if (!("username" in input && "level" in input)) { + return { ok: false, error: "malformed player" }; + } + if (typeof input.username !== "string") { + return { ok: false, error: "malformed player" }; + } + if (typeof input.level !== "number") { + return { ok: false, error: "malformed player" }; + } + const { username, level } = input; + return { ok: true, value: { username, level } }; + } else { + return { ok: false, error: "malformed player" }; + } +} diff --git a/surveys/code_coverage/program_1_test.ts b/surveys/code_coverage/program_1_test.ts new file mode 100644 index 0000000..a15bc89 --- /dev/null +++ b/surveys/code_coverage/program_1_test.ts @@ -0,0 +1,13 @@ +import { assertEquals } from "jsr:@std/assert"; +import { playerFromUnknown } from "./program_1.ts"; + +Deno.test("must work", () => { + assertEquals( + playerFromUnknown("miklz-33"), + { ok: true, value: { username: "miklz", level: 33 } }, + ); + assertEquals( + playerFromUnknown({ username: "piet", level: 2 }), + { ok: true, value: { username: "piet", level: 2 } }, + ); +}); diff --git a/surveys/code_coverage/program_2.ts b/surveys/code_coverage/program_2.ts new file mode 100644 index 0000000..65c7edd --- /dev/null +++ b/surveys/code_coverage/program_2.ts @@ -0,0 +1,45 @@ +// deno-fmt-ignore +const charVal: {[key: string]: number} = { + "0": 0, "1": 1, "2": 2, "3": 3, + "4": 4, "5": 5, "6": 6, "7": 7, + "8": 8, "9": 9, "a": 10, "b": 11, + "c": 12, "d": 13, "e": 14, "f": 15, +}; +const base2Digits = ["0", "1"]; +const base8Digits = [...base2Digits, "2", "3", "4", "5", "6", "7"]; +const base10Digits = [...base8Digits, "8", "9"]; +const base16Digits = [...base10Digits, "a", "b", "c", "d", "e", "f"]; + +export function stringToInt(text: string): number { + if (text.length === 0) { + return NaN; + } + if (text[0] === "0") { + if (text.length === 1) { + return 0; + } else if (text[1] == "b") { + return parseDigits(text.slice(2), 2, base2Digits); + } else if (text[1] == "x") { + return parseDigits(text.slice(2), 16, base16Digits); + } else { + return parseDigits(text.slice(1), 8, base8Digits); + } + } + return parseDigits(text, 10, base10Digits); +} + +function parseDigits( + numberText: string, + base: number, + digitSet: string[], +): number { + let value = 0; + for (const ch of numberText) { + value *= base; + if (!digitSet.includes(ch)) { + return NaN; + } + value += charVal[ch]; + } + return value; +} diff --git a/surveys/code_coverage/program_2_test.ts b/surveys/code_coverage/program_2_test.ts new file mode 100644 index 0000000..e0425e2 --- /dev/null +++ b/surveys/code_coverage/program_2_test.ts @@ -0,0 +1,11 @@ +import { assertEquals } from "jsr:@std/assert"; +import { stringToInt } from "./program_2.ts"; + +Deno.test("must work", () => { + assertEquals(stringToInt("0"), 0); + assertEquals(stringToInt("10"), 10); + assertEquals(stringToInt("0b110"), 6); + assertEquals(stringToInt("071"), 57); + assertEquals(stringToInt("0xaa"), 170); + assertEquals(stringToInt("john"), NaN); +}); diff --git a/surveys/code_coverage/survey.ods b/surveys/code_coverage/survey.ods new file mode 100644 index 0000000000000000000000000000000000000000..e5da3dee7fd28b523833660a3196f9ea89f3d0a5 GIT binary patch literal 18380 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 dP3UiyX$2Xu_xK= i 10 { + break; + } + result = add(result, 5); + i = + i 1; +} +``` + +Imagine you were to run the code. +``` +slige --run program.slg +``` + +What percantage distribution of the total execution time is spent in `main` and in `add`? Remember that all time spent in `add` is also time spent in `main`. + +Examples: + +Total program | Inside `main` | Inside `add` +---|---|--- +100% | 80% | 40% +100% | 90% | 10% +100% | 96% | 70% + +Note down the guesses. + diff --git a/surveys/flame_graph/program_flame_graph.png b/surveys/flame_graph/program_flame_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..78ee82cd9135ef9daba2268271fd635a88923406 GIT binary patch literal 5070 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 literal 0 HcmV?d00001 diff --git a/surveys/flame_graph/survey.ods b/surveys/flame_graph/survey.ods new file mode 100644 index 0000000000000000000000000000000000000000..72153e30ab5b216d9ea460bd831a5dc3d289fff6 GIT binary patch literal 21592 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 GARYjLRoT!0 literal 0 HcmV?d00001 diff --git a/web/example.slg b/web/example.slg new file mode 100644 index 0000000..927726f --- /dev/null +++ b/web/example.slg @@ -0,0 +1,14 @@ +fn add(a, b) { + + a b +} + +let result = 0; +let i = 0; +loop { + if >= i 10 { + break; + } + result = add(result, 5); + i = + i 1; +} +