feat: implement reports
This commit is contained in:
@@ -406,13 +406,13 @@ pub fn analyze(
|
||||
let mut credits: BTreeMap<String, Vec<f64>> = BTreeMap::new();
|
||||
let mut blank = 0usize;
|
||||
for r in &rows {
|
||||
if r.selected.is_empty() {
|
||||
if r.chosen().is_empty() {
|
||||
blank += 1;
|
||||
continue;
|
||||
}
|
||||
// A multiple-response item is credited to the joined set, so that
|
||||
// "chose A and C" is one response pattern rather than two options.
|
||||
let label = r.selected.join("+");
|
||||
let label = r.chosen().join("+");
|
||||
if let Some(&si) = student_index.get(r.student_key.as_str()) {
|
||||
chose.entry(label.clone()).or_default().push(si);
|
||||
}
|
||||
@@ -775,7 +775,7 @@ fn infer_key(rows: &[&crate::responses::Response]) -> Vec<String> {
|
||||
let mut out: BTreeSet<String> = BTreeSet::new();
|
||||
for r in rows {
|
||||
if r.credit >= 0.999 {
|
||||
for letter in &r.selected {
|
||||
for letter in r.chosen() {
|
||||
out.insert(letter.clone());
|
||||
}
|
||||
}
|
||||
@@ -857,6 +857,7 @@ mod tests {
|
||||
assessment_id: "a".into(),
|
||||
date: None,
|
||||
form: None,
|
||||
form_position: None,
|
||||
student_key: student.into(),
|
||||
sid: None,
|
||||
name: None,
|
||||
@@ -870,7 +871,9 @@ mod tests {
|
||||
} else {
|
||||
vec![letter.to_string()]
|
||||
},
|
||||
selected_source: vec![],
|
||||
eliminated: vec![],
|
||||
eliminated_source: vec![],
|
||||
correct: Some(credit >= 0.999),
|
||||
credit,
|
||||
points_possible: 1.0,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -563,7 +563,7 @@ fn missed_items(
|
||||
if let Some(entry) = cat.get(uid) {
|
||||
// Feedback for the specific option chosen, which is the whole
|
||||
// point of recording per-distractor misconceptions.
|
||||
if let Some(letter) = r.selected.first() {
|
||||
if let Some(letter) = r.chosen().first() {
|
||||
if let Some(choice) = entry.item.option(letter) {
|
||||
misconception = choice.misconception.clone();
|
||||
feedback = choice.student_text().map(|s| s.to_string());
|
||||
@@ -592,7 +592,7 @@ fn missed_items(
|
||||
out.push(MissedItem {
|
||||
number: r.item_number,
|
||||
item_ref: r.item_ref.clone(),
|
||||
selected: r.selected.clone(),
|
||||
selected: r.chosen().to_vec(),
|
||||
credit: r.credit,
|
||||
level: r.level,
|
||||
learning_objectives: r.learning_objectives.clone(),
|
||||
@@ -1089,6 +1089,7 @@ mod tests {
|
||||
assessment_id: "a".into(),
|
||||
date: None,
|
||||
form: None,
|
||||
form_position: None,
|
||||
student_key: student.into(),
|
||||
sid: None,
|
||||
name: None,
|
||||
@@ -1098,7 +1099,9 @@ mod tests {
|
||||
item_ref: None,
|
||||
item_version: None,
|
||||
selected: vec!["A".into()],
|
||||
selected_source: vec![],
|
||||
eliminated: vec![],
|
||||
eliminated_source: vec![],
|
||||
correct: Some(credit >= 0.999),
|
||||
credit,
|
||||
points_possible: 1.0,
|
||||
|
||||
Reference in New Issue
Block a user