Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
use std::{collections::HashSet, mem::swap};
use crate::error::OpossumError;
#[derive(Default, Debug)]
pub struct OpticPorts {
inputs: HashSet<String>,
outputs: HashSet<String>,
}
impl OpticPorts {
pub fn new() -> Self {
Self::default()
}
pub fn inputs(&self) -> Vec<String> {
let v = self.inputs.clone().into_iter().collect::<Vec<String>>();
v
}
pub fn outputs(&self) -> Vec<String> {
let v = self.outputs.clone().into_iter().collect::<Vec<String>>();
v
}
pub fn add_input(&mut self, name: &str) -> Result<(),OpossumError> {
if self.inputs.insert(name.into()) {
Ok(()) }
else {
Err(OpossumError::OpticPort(format!("input port with name {} already exists",name)))
}
}
pub fn add_output(&mut self, name: &str) -> Result<(),OpossumError> {
if self.outputs.insert(name.into()) {
Ok(()) }
else {
Err(OpossumError::OpticPort(format!("output port with name {} already exists",name)))
}
}
pub fn invert(&mut self) {
swap(&mut self.inputs,&mut self.outputs);
}
}
#[cfg(test)]
mod test {
use crate::optic_ports::{OpticPorts};
#[test]
fn new() {
let ports = OpticPorts::new();
assert_eq!(ports.inputs.len(), 0);
assert_eq!(ports.outputs.len(), 0);
}
#[test]
fn add_input_ok() {
let mut ports = OpticPorts::new();
assert!(ports.add_input("Test").is_ok());
assert_eq!(ports.inputs.len(), 1);
}
#[test]
fn add_input_twice() {
let mut ports = OpticPorts::new();
assert!(ports.add_input("Test").is_ok());
assert!(ports.add_input("Test").is_err());
assert_eq!(ports.inputs.len(), 1);
}
#[test]
fn add_output_ok() {
let mut ports = OpticPorts::new();
assert!(ports.add_output("Test").is_ok());
assert_eq!(ports.outputs.len(), 1);
}
#[test]
fn add_output_twice() {
let mut ports = OpticPorts::new();
assert!(ports.add_output("Test").is_ok());
assert!(ports.add_output("Test").is_err());
assert_eq!(ports.outputs.len(), 1);
}
#[test]
fn inputs() {
let mut ports = OpticPorts::new();
ports.add_input("Test1").unwrap();
ports.add_input("Test2").unwrap();
let mut v=ports.inputs();
v.sort();
assert_eq!(v, vec!["Test1".to_string(), "Test2".to_string()]);
}
#[test]
fn outputs() {
let mut ports = OpticPorts::new();
ports.add_output("Test1").unwrap();
ports.add_output("Test2").unwrap();
let mut v=ports.outputs();
v.sort();
assert_eq!(v, vec!["Test1".to_string(), "Test2".to_string()]);
}
}