konnektoren_core/challenges/ordering/
mod.rs1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, JsonSchema)]
5pub struct Ordering {
6 pub id: String,
8 pub name: String,
10 pub description: String,
12 pub items: Vec<OrderingItem>,
14}
15
16impl Default for Ordering {
17 fn default() -> Self {
18 let data = include_str!("../../../assets/ordering_default.yml");
19 serde_yaml::from_str(data).unwrap()
20 }
21}
22
23#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, JsonSchema)]
24pub struct OrderingItem {
25 pub elements: Vec<String>,
27 pub correct_order: Vec<usize>,
29}
30
31#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, JsonSchema)]
32pub struct OrderingResult {
33 pub order: Vec<usize>,
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn new_ordering() {
43 let id = "123".to_string();
44 let name = "Test".to_string();
45 let description = "Description".to_string();
46 let items = vec![
47 OrderingItem {
48 elements: vec!["A".to_string(), "B".to_string(), "C".to_string()],
49 correct_order: vec![0, 1, 2],
50 },
51 OrderingItem {
52 elements: vec!["D".to_string(), "E".to_string(), "F".to_string()],
53 correct_order: vec![2, 1, 0],
54 },
55 ];
56 let ordering = Ordering {
57 id,
58 name,
59 description,
60 items,
61 };
62 assert_eq!(ordering.id, "123");
63 assert_eq!(ordering.name, "Test");
64 assert_eq!(ordering.description, "Description");
65 assert_eq!(ordering.items.len(), 2);
66 assert_eq!(ordering.items[0].elements.len(), 3);
67 assert_eq!(ordering.items[0].correct_order.len(), 3);
68 assert_eq!(ordering.items[1].elements.len(), 3);
69 assert_eq!(ordering.items[1].correct_order.len(), 3);
70 }
71
72 #[test]
73 fn test_ordering_deserialization() {
74 let yaml = r#"
75 id: "ordering-example"
76 name: "Ordering Example"
77 description: "Order the elements correctly"
78 items:
79 - elements:
80 - "First element"
81 - "Second element"
82 - "Third element"
83 correct_order: [0, 1, 2]
84 - elements:
85 - "Apple"
86 - "Banana"
87 - "Orange"
88 correct_order: [2, 0, 1]
89 "#;
90
91 let ordering: Ordering = serde_yaml::from_str(yaml).unwrap();
92 assert_eq!(ordering.id, "ordering-example");
93 assert_eq!(ordering.name, "Ordering Example");
94 assert_eq!(ordering.description, "Order the elements correctly");
95 assert_eq!(ordering.items.len(), 2);
96
97 let first_item = &ordering.items[0];
98 assert_eq!(first_item.elements.len(), 3);
99 assert_eq!(first_item.correct_order, vec![0, 1, 2]);
100
101 let second_item = &ordering.items[1];
102 assert_eq!(second_item.elements.len(), 3);
103 assert_eq!(second_item.correct_order, vec![2, 0, 1]);
104 }
105
106 #[test]
107 fn test_ordering_result() {
108 let result = OrderingResult {
109 order: vec![2, 0, 1],
110 };
111 assert_eq!(result.order, vec![2, 0, 1]);
112 }
113
114 #[test]
115 fn test_ordering_result_default() {
116 let result = OrderingResult::default();
117 assert!(result.order.is_empty());
118 }
119}