Functional Weave
Code in Rust

education.gpa@1.0.0

vectors.json

6,746 bytes · view raw

[
 {
  "name": "credit-weighted: A(3), B+(4), C(3) is 3.12, not the unweighted 3.10",
  "args": [
   [
    {
     "grade": "A",
     "credits": 3
    },
    {
     "grade": "B+",
     "credits": 4
    },
    {
     "grade": "C",
     "credits": 3
    }
   ],
   null,
   "half-up"
  ],
  "expect": {
   "gpa": 312,
   "qualityPoints": 3120,
   "gpaCredits": 10,
   "excludedCredits": 0
  }
 },
 {
  "name": "a half-hundredth rounds up under half-up: A(1), B+(3) is 3.475",
  "args": [
   [
    {
     "grade": "A",
     "credits": 1
    },
    {
     "grade": "B+",
     "credits": 3
    }
   ],
   null,
   "half-up"
  ],
  "expect": {
   "gpa": 348,
   "qualityPoints": 1390,
   "gpaCredits": 4,
   "excludedCredits": 0
  }
 },
 {
  "name": "the same 3.475 truncated to 3.47 under down",
  "args": [
   [
    {
     "grade": "A",
     "credits": 1
    },
    {
     "grade": "B+",
     "credits": 3
    }
   ],
   null,
   "down"
  ],
  "expect": {
   "gpa": 347,
   "qualityPoints": 1390,
   "gpaCredits": 4,
   "excludedCredits": 0
  }
 },
 {
  "name": "3.525 goes to the even 3.52 under half-even",
  "args": [
   [
    {
     "grade": "B",
     "credits": 1
    },
    {
     "grade": "A-",
     "credits": 3
    }
   ],
   null,
   "half-even"
  ],
  "expect": {
   "gpa": 352,
   "qualityPoints": 1410,
   "gpaCredits": 4,
   "excludedCredits": 0
  }
 },
 {
  "name": "a repeating 3.333... is 3.33 half-up",
  "args": [
   [
    {
     "grade": "A",
     "credits": 3
    },
    {
     "grade": "B",
     "credits": 3
    },
    {
     "grade": "B",
     "credits": 3
    }
   ],
   null,
   "half-up"
  ],
  "expect": {
   "gpa": 333,
   "qualityPoints": 3000,
   "gpaCredits": 9,
   "excludedCredits": 0
  }
 },
 {
  "name": "and 3.34 rounded up",
  "args": [
   [
    {
     "grade": "A",
     "credits": 3
    },
    {
     "grade": "B",
     "credits": 3
    },
    {
     "grade": "B",
     "credits": 3
    }
   ],
   null,
   "up"
  ],
  "expect": {
   "gpa": 334,
   "qualityPoints": 3000,
   "gpaCredits": 9,
   "excludedCredits": 0
  }
 },
 {
  "name": "pass and withdrawn grades are left out of both sums",
  "args": [
   [
    {
     "grade": "A",
     "credits": 3
    },
    {
     "grade": "P",
     "credits": 3
    },
    {
     "grade": "W",
     "credits": 4
    }
   ],
   null,
   "half-up"
  ],
  "expect": {
   "gpa": 400,
   "qualityPoints": 1200,
   "gpaCredits": 3,
   "excludedCredits": 7
  }
 },
 {
  "name": "an F counts its credits at zero points",
  "args": [
   [
    {
     "grade": "A",
     "credits": 3
    },
    {
     "grade": "F",
     "credits": 3
    }
   ],
   null,
   "half-up"
  ],
  "expect": {
   "gpa": 200,
   "qualityPoints": 1200,
   "gpaCredits": 6,
   "excludedCredits": 0
  }
 },
 {
  "name": "only pass grades means no GPA, not 0.00",
  "args": [
   [
    {
     "grade": "P",
     "credits": 3
    }
   ],
   null,
   "half-up"
  ],
  "expect": {
   "gpa": null,
   "qualityPoints": 0,
   "gpaCredits": 0,
   "excludedCredits": 3
  }
 },
 {
  "name": "no courses at all means no GPA",
  "args": [
   [],
   null,
   "half-up"
  ],
  "expect": {
   "gpa": null,
   "qualityPoints": 0,
   "gpaCredits": 0,
   "excludedCredits": 0
  }
 },
 {
  "name": "a zero-credit course adds nothing",
  "args": [
   [
    {
     "grade": "A",
     "credits": 0
    },
    {
     "grade": "B",
     "credits": 3
    }
   ],
   null,
   "half-up"
  ],
  "expect": {
   "gpa": 300,
   "qualityPoints": 900,
   "gpaCredits": 3,
   "excludedCredits": 0
  }
 },
 {
  "name": "an institution's own table with A+ at 4.33",
  "args": [
   [
    {
     "grade": "A+",
     "credits": 3
    },
    {
     "grade": "B",
     "credits": 3
    }
   ],
   [
    {
     "grade": "A+",
     "points": 433
    },
    {
     "grade": "A",
     "points": 400
    },
    {
     "grade": "B",
     "points": 300
    },
    {
     "grade": "P",
     "points": null
    }
   ],
   "half-up"
  ],
  "expect": {
   "gpa": 367,
   "qualityPoints": 2199,
   "gpaCredits": 6,
   "excludedCredits": 0
  }
 },
 {
  "name": "the same, truncated",
  "args": [
   [
    {
     "grade": "A+",
     "credits": 3
    },
    {
     "grade": "B",
     "credits": 3
    }
   ],
   [
    {
     "grade": "A+",
     "points": 433
    },
    {
     "grade": "A",
     "points": 400
    },
    {
     "grade": "B",
     "points": 300
    },
    {
     "grade": "P",
     "points": null
    }
   ],
   "down"
  ],
  "expect": {
   "gpa": 366,
   "qualityPoints": 2199,
   "gpaCredits": 6,
   "excludedCredits": 0
  }
 },
 {
  "name": "half credits scaled by ten: A(35), B(10)",
  "args": [
   [
    {
     "grade": "A",
     "credits": 35
    },
    {
     "grade": "B",
     "credits": 10
    }
   ],
   null,
   "half-up"
  ],
  "expect": {
   "gpa": 378,
   "qualityPoints": 17000,
   "gpaCredits": 45,
   "excludedCredits": 0
  }
 },
 {
  "name": "a grade not in the table is an error",
  "args": [
   [
    {
     "grade": "D-",
     "credits": 3
    }
   ],
   null,
   "half-up"
  ],
  "expectError": "grade \"D-\" is not in the grade-point table"
 },
 {
  "name": "grades match case exactly",
  "args": [
   [
    {
     "grade": "a",
     "credits": 3
    }
   ],
   null,
   "half-up"
  ],
  "expectError": "grade \"a\" is not in the grade-point table"
 },
 {
  "name": "negative credits are an error",
  "args": [
   [
    {
     "grade": "A",
     "credits": -1
    }
   ],
   null,
   "half-up"
  ],
  "expectError": "credits must be a whole number of 0 or more, received -1"
 },
 {
  "name": "fractional credits are an error",
  "args": [
   [
    {
     "grade": "A",
     "credits": 1.5
    }
   ],
   null,
   "half-up"
  ],
  "expectError": "credits must be a whole number of 0 or more, received 1.5"
 },
 {
  "name": "an empty table is an error",
  "args": [
   [
    {
     "grade": "A",
     "credits": 3
    }
   ],
   [],
   "half-up"
  ],
  "expectError": "gradePoints must not be empty"
 },
 {
  "name": "a grade twice in the table is an error",
  "args": [
   [
    {
     "grade": "A",
     "credits": 3
    }
   ],
   [
    {
     "grade": "A",
     "points": 400
    },
    {
     "grade": "A",
     "points": 370
    }
   ],
   "half-up"
  ],
  "expectError": "grade \"A\" appears twice in gradePoints"
 },
 {
  "name": "negative points are an error",
  "args": [
   [
    {
     "grade": "A",
     "credits": 3
    }
   ],
   [
    {
     "grade": "A",
     "points": -10
    }
   ],
   "half-up"
  ],
  "expectError": "points must be whole hundredths of 0 or more, received -10 for grade \"A\""
 },
 {
  "name": "an unknown rounding mode is an error",
  "args": [
   [
    {
     "grade": "A",
     "credits": 3
    }
   ],
   null,
   "nearest"
  ],
  "expectError": "unknown rounding mode \"nearest\""
 }
]