import { describe, it } from "vitest"; import { percentToRoundedGrade, pointsToGrade } from "../assignmentService"; describe("assignmentService", () => { it("pointsToGrade", () => { expect(pointsToGrade(24, 24)).toBe(6); expect(pointsToGrade(23, 24)).toBe(6); expect(pointsToGrade(22, 24)).toBe(5.5); expect(pointsToGrade(21, 24)).toBe(5.5); expect(pointsToGrade(20, 24)).toBe(5); expect(pointsToGrade(19, 24)).toBe(5); expect(pointsToGrade(18, 24)).toBe(5); expect(pointsToGrade(17, 24)).toBe(4.5); expect(pointsToGrade(16, 24)).toBe(4.5); expect(pointsToGrade(15, 24)).toBe(4); expect(pointsToGrade(14, 24)).toBe(4); expect(pointsToGrade(13, 24)).toBe(3.5); expect(pointsToGrade(12, 24)).toBe(3.5); expect(pointsToGrade(11, 24)).toBe(3.5); expect(pointsToGrade(10, 24)).toBe(3); expect(pointsToGrade(9, 24)).toBe(3); expect(pointsToGrade(8, 24)).toBe(2.5); expect(pointsToGrade(7, 24)).toBe(2.5); expect(pointsToGrade(6, 24)).toBe(2.5); expect(pointsToGrade(5, 24)).toBe(2); expect(pointsToGrade(4, 24)).toBe(2); expect(pointsToGrade(3, 24)).toBe(1.5); expect(pointsToGrade(2, 24)).toBe(1.5); expect(pointsToGrade(1, 24)).toBe(1); expect(pointsToGrade(0, 24)).toBe(1); }); it("percentToRoundedGrade with half grades", () => { expect(percentToRoundedGrade(24 / 24)).toBe(6); expect(percentToRoundedGrade(23 / 24)).toBe(6); expect(percentToRoundedGrade(22 / 24)).toBe(5.5); expect(percentToRoundedGrade(21 / 24)).toBe(5.5); expect(percentToRoundedGrade(20 / 24)).toBe(5); expect(percentToRoundedGrade(19 / 24)).toBe(5); expect(percentToRoundedGrade(18 / 24)).toBe(5); expect(percentToRoundedGrade(17 / 24)).toBe(4.5); expect(percentToRoundedGrade(16 / 24)).toBe(4.5); expect(percentToRoundedGrade(15 / 24)).toBe(4); expect(percentToRoundedGrade(14 / 24)).toBe(4); expect(percentToRoundedGrade(13 / 24)).toBe(3.5); expect(percentToRoundedGrade(12 / 24)).toBe(3.5); expect(percentToRoundedGrade(11 / 24)).toBe(3.5); expect(percentToRoundedGrade(10 / 24)).toBe(3); expect(percentToRoundedGrade(9 / 24)).toBe(3); expect(percentToRoundedGrade(8 / 24)).toBe(2.5); expect(percentToRoundedGrade(7 / 24)).toBe(2.5); expect(percentToRoundedGrade(6 / 24)).toBe(2.5); expect(percentToRoundedGrade(5 / 24)).toBe(2); expect(percentToRoundedGrade(4 / 24)).toBe(2); expect(percentToRoundedGrade(3 / 24)).toBe(1.5); expect(percentToRoundedGrade(2 / 24)).toBe(1.5); expect(percentToRoundedGrade(1 / 24)).toBe(1); expect(percentToRoundedGrade(0 / 24)).toBe(1); }); it("percentToRoundedGrade with 2 decimal places", () => { expect(percentToRoundedGrade(24 / 24, false)).toBeCloseTo(6); expect(percentToRoundedGrade(23 / 24, false)).toBeCloseTo(5.79); expect(percentToRoundedGrade(22 / 24, false)).toBeCloseTo(5.58); expect(percentToRoundedGrade(21 / 24, false)).toBeCloseTo(5.38); expect(percentToRoundedGrade(20 / 24, false)).toBeCloseTo(5.17); expect(percentToRoundedGrade(19 / 24, false)).toBeCloseTo(4.96); expect(percentToRoundedGrade(18 / 24, false)).toBeCloseTo(4.75); expect(percentToRoundedGrade(17 / 24, false)).toBeCloseTo(4.54); expect(percentToRoundedGrade(16 / 24, false)).toBeCloseTo(4.33); expect(percentToRoundedGrade(15 / 24, false)).toBeCloseTo(4.13); expect(percentToRoundedGrade(14 / 24, false)).toBeCloseTo(3.92); expect(percentToRoundedGrade(13 / 24, false)).toBeCloseTo(3.71); expect(percentToRoundedGrade(12 / 24, false)).toBeCloseTo(3.5); expect(percentToRoundedGrade(11 / 24, false)).toBeCloseTo(3.29); expect(percentToRoundedGrade(10 / 24, false)).toBeCloseTo(3.08); expect(percentToRoundedGrade(9 / 24, false)).toBeCloseTo(2.88); expect(percentToRoundedGrade(8 / 24, false)).toBeCloseTo(2.67); expect(percentToRoundedGrade(7 / 24, false)).toBeCloseTo(2.46); expect(percentToRoundedGrade(6 / 24, false)).toBeCloseTo(2.25); expect(percentToRoundedGrade(5 / 24, false)).toBeCloseTo(2.04); expect(percentToRoundedGrade(4 / 24, false)).toBeCloseTo(1.83); expect(percentToRoundedGrade(3 / 24, false)).toBeCloseTo(1.63); expect(percentToRoundedGrade(2 / 24, false)).toBeCloseTo(1.42); expect(percentToRoundedGrade(1 / 24, false)).toBeCloseTo(1.21); expect(percentToRoundedGrade(0 / 24, false)).toBeCloseTo(1); }); });