relation_view/
relation_view.rs1use relmath::prelude::{BinaryRelation, NaryRelation, RelationView, UnaryRelation};
4
5fn tuple_count<R: RelationView>(relation: &R) -> usize {
6 relation.len()
7}
8
9fn main() -> Result<(), relmath::NaryRelationError> {
10 let people = UnaryRelation::from_values(["Ada", "Bob"]);
11 let parent = BinaryRelation::from_pairs([("Ada", "Bob"), ("Bob", "Cara")]);
12 let enrollments =
13 NaryRelation::from_rows(["student", "course"], [["Ada", "Math"], ["Bob", "Physics"]])?;
14
15 assert_eq!(tuple_count(&people), 2);
16 assert_eq!(tuple_count(&parent), 2);
17 assert_eq!(tuple_count(&enrollments), 2);
18
19 assert_eq!(
20 people.tuples().copied().collect::<Vec<_>>(),
21 vec!["Ada", "Bob"]
22 );
23 assert_eq!(
24 parent.tuples().copied().collect::<Vec<_>>(),
25 vec![("Ada", "Bob"), ("Bob", "Cara")]
26 );
27 assert_eq!(
28 enrollments
29 .tuples()
30 .map(|row| row.to_vec())
31 .collect::<Vec<_>>(),
32 vec![vec!["Ada", "Math"], vec!["Bob", "Physics"]]
33 );
34
35 println!("people: {:?}", people.tuples().copied().collect::<Vec<_>>());
36 println!("parent: {:?}", parent.tuples().copied().collect::<Vec<_>>());
37 println!(
38 "enrollments: {:?}",
39 enrollments
40 .tuples()
41 .map(|row| row.to_vec())
42 .collect::<Vec<_>>()
43 );
44
45 Ok(())
46}