room to string; dedupe test resources
This commit is contained in:
parent
4621ea3742
commit
0ebe3babe6
146
src/main.rs
146
src/main.rs
|
@ -188,6 +188,57 @@ fn test_item() -> Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_room() -> Room {
|
||||||
|
// todo can I instantiate these inline?
|
||||||
|
let mut items = HashMap::new();
|
||||||
|
let mut exits = HashMap::new();
|
||||||
|
let mut endings = HashMap::new();
|
||||||
|
|
||||||
|
items.insert(Position { x: 11, y: 5}, "d".to_string());
|
||||||
|
items.insert(Position { x: 8, y: 3}, "e".to_string());
|
||||||
|
items.insert(Position { x: 1, y: 0}, "5".to_string());
|
||||||
|
items.insert(Position { x: 2, y: 1}, "6".to_string());
|
||||||
|
items.insert(Position { x: 3, y: 2}, "6".to_string());
|
||||||
|
|
||||||
|
exits.insert(
|
||||||
|
Position { x: 3, y: 3},
|
||||||
|
Exit { room: "3".to_string(), position: Position { x: 10, y: 6}}
|
||||||
|
);
|
||||||
|
|
||||||
|
endings.insert(Position { x: 8, y: 7 }, "undefined".to_string());
|
||||||
|
|
||||||
|
Room {
|
||||||
|
id: "a".to_string(),
|
||||||
|
palette: "9".to_string(),
|
||||||
|
name: Some("cellar 7".to_string()),
|
||||||
|
tiles: vec![
|
||||||
|
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"1l".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
||||||
|
"y".to_string(),"x".to_string(),"0".to_string(),"0".to_string(),"1j".to_string(),"0".to_string(),"0".to_string(),"1j".to_string(),"1l".to_string(),"0".to_string(),"1j".to_string(),"0".to_string(),"0".to_string(),"1j".to_string(),"0".to_string(),"0".to_string(),
|
||||||
|
"y".to_string(),"y".to_string(),"x".to_string(),"k".to_string(),"k".to_string(),"1c".to_string(),"1x".to_string(),"1y".to_string(),"1m".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
||||||
|
"y".to_string(),"y".to_string(),"y".to_string(),"x".to_string(),"k".to_string(),"s".to_string(),"s".to_string(),"s".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"1g".to_string(),"1f".to_string(),"k".to_string(),
|
||||||
|
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"1i".to_string(),"1u".to_string(),"1u".to_string(),"1u".to_string(),"1v".to_string(),"11".to_string(),"19".to_string(),"1b".to_string(),"1a".to_string(),"1e".to_string(),"10".to_string(),"k".to_string(),
|
||||||
|
"k".to_string(),"z".to_string(),"z".to_string(),"11".to_string(),"12".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"10".to_string(),"17".to_string(),"z".to_string(),"18".to_string(),"1e".to_string(),"12".to_string(),"k".to_string(),
|
||||||
|
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"1k".to_string(),"14".to_string(),"15".to_string(),"16".to_string(),"1h".to_string(),"z".to_string(),"k".to_string(),
|
||||||
|
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"10".to_string(),"1d".to_string(),"1v".to_string(),"1r".to_string(),"1s".to_string(),"1r".to_string(),"1q".to_string(),"1z".to_string(),"k".to_string(),
|
||||||
|
"k".to_string(),"z".to_string(),"z".to_string(),"12".to_string(),"10".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"1i".to_string(),"1n".to_string(),"1o".to_string(),"1o".to_string(),"1o".to_string(),"1p".to_string(),"z".to_string(),"k".to_string(),
|
||||||
|
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"10".to_string(),"z".to_string(),"z".to_string(),"k".to_string(),
|
||||||
|
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"11".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"k".to_string(),
|
||||||
|
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"12".to_string(),"z".to_string(),"z".to_string(),"10".to_string(),"12".to_string(),"k".to_string(),
|
||||||
|
"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),
|
||||||
|
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
||||||
|
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
||||||
|
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string()
|
||||||
|
],
|
||||||
|
items,
|
||||||
|
exits,
|
||||||
|
endings
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_room_string() -> String {
|
||||||
|
"ROOM a\n0,0,0,0,0,0,0,0,1l,0,0,0,0,0,0,0\ny,x,0,0,1j,0,0,1j,1l,0,1j,0,0,1j,0,0\ny,y,x,k,k,1c,1x,1y,1m,0,0,0,0,0,0,0\ny,y,y,x,k,s,s,s,k,k,k,k,k,1g,1f,k\nk,z,z,z,1i,1u,1u,1u,1v,11,19,1b,1a,1e,10,k\nk,z,z,11,12,z,z,z,z,10,17,z,18,1e,12,k\nk,z,z,z,z,z,z,z,z,1k,14,15,16,1h,z,k\nk,z,z,z,z,z,z,10,1d,1v,1r,1s,1r,1q,1z,k\nk,z,z,12,10,z,z,z,1i,1n,1o,1o,1o,1p,z,k\nk,z,z,z,z,z,z,z,z,z,z,z,10,z,z,k\nk,z,z,z,z,z,11,z,z,z,z,z,z,z,z,k\nk,z,z,z,z,z,z,z,z,z,12,z,z,10,12,k\nk,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\nNAME cellar 7\nITM d 11,5\nITM e 8,3\nITM 5 1,0\nITM 6 2,1\nITM 6 3,2\nEXT 3,3 3 10,6\nEND undefined 8,7\nPAL 9".to_string()
|
||||||
|
}
|
||||||
|
|
||||||
fn image_from_string(string: String) -> Image {
|
fn image_from_string(string: String) -> Image {
|
||||||
let string = string.replace("\n", "");
|
let string = string.replace("\n", "");
|
||||||
let pixels: Vec<&str> = string.split("").collect();
|
let pixels: Vec<&str> = string.split("").collect();
|
||||||
|
@ -765,56 +816,59 @@ fn room_from_string(string: String) -> Room {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_room_from_string() {
|
fn test_room_from_string() {
|
||||||
let output = room_from_string("ROOM a\n0,0,0,0,0,0,0,0,1l,0,0,0,0,0,0,0\ny,x,0,0,1j,0,0,1j,1l,0,1j,0,0,1j,0,0\ny,y,x,k,k,1c,1x,1y,1m,0,0,0,0,0,0,0\ny,y,y,x,k,s,s,s,k,k,k,k,k,1g,1f,k\nk,z,z,z,1i,1u,1u,1u,1v,11,19,1b,1a,1e,10,k\nk,z,z,11,12,z,z,z,z,10,17,z,18,1e,12,k\nk,z,z,z,z,z,z,z,z,1k,14,15,16,1h,z,k\nk,z,z,z,z,z,z,10,1d,1v,1r,1s,1r,1q,1z,k\nk,z,z,12,10,z,z,z,1i,1n,1o,1o,1o,1p,z,k\nk,z,z,z,z,z,z,z,z,z,z,z,10,z,z,k\nk,z,z,z,z,z,11,z,z,z,z,z,z,z,z,k\nk,z,z,z,z,z,z,z,z,z,12,z,z,10,12,k\nk,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\nNAME cellar 7\nITM d 11,5\nITM e 8,3\nITM 5 1,0\nITM 6 2,1\nITM 6 3,2\nEXT 3,3 3 10,6\nEND undefined 8,7\nPAL 9".to_string());
|
let output = room_from_string(test_room_string());
|
||||||
|
let expected = test_room();
|
||||||
// todo can I instantiate these inline?
|
|
||||||
let mut items = HashMap::new();
|
|
||||||
let mut exits = HashMap::new();
|
|
||||||
let mut endings = HashMap::new();
|
|
||||||
|
|
||||||
items.insert(Position { x: 11, y: 5}, "d".to_string());
|
|
||||||
items.insert(Position { x: 8, y: 3}, "e".to_string());
|
|
||||||
items.insert(Position { x: 1, y: 0}, "5".to_string());
|
|
||||||
items.insert(Position { x: 2, y: 1}, "6".to_string());
|
|
||||||
items.insert(Position { x: 3, y: 2}, "6".to_string());
|
|
||||||
|
|
||||||
exits.insert(
|
|
||||||
Position { x: 3, y: 3},
|
|
||||||
Exit { room: "3".to_string(), position: Position { x: 10, y: 6}}
|
|
||||||
);
|
|
||||||
|
|
||||||
endings.insert(Position { x: 8, y: 7 }, "undefined".to_string());
|
|
||||||
|
|
||||||
let expected = Room {
|
|
||||||
id: "a".to_string(),
|
|
||||||
palette: "9".to_string(),
|
|
||||||
name: Some("cellar 7".to_string()),
|
|
||||||
tiles: vec![
|
|
||||||
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"1l".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
|
||||||
"y".to_string(),"x".to_string(),"0".to_string(),"0".to_string(),"1j".to_string(),"0".to_string(),"0".to_string(),"1j".to_string(),"1l".to_string(),"0".to_string(),"1j".to_string(),"0".to_string(),"0".to_string(),"1j".to_string(),"0".to_string(),"0".to_string(),
|
|
||||||
"y".to_string(),"y".to_string(),"x".to_string(),"k".to_string(),"k".to_string(),"1c".to_string(),"1x".to_string(),"1y".to_string(),"1m".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
|
||||||
"y".to_string(),"y".to_string(),"y".to_string(),"x".to_string(),"k".to_string(),"s".to_string(),"s".to_string(),"s".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"1g".to_string(),"1f".to_string(),"k".to_string(),
|
|
||||||
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"1i".to_string(),"1u".to_string(),"1u".to_string(),"1u".to_string(),"1v".to_string(),"11".to_string(),"19".to_string(),"1b".to_string(),"1a".to_string(),"1e".to_string(),"10".to_string(),"k".to_string(),
|
|
||||||
"k".to_string(),"z".to_string(),"z".to_string(),"11".to_string(),"12".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"10".to_string(),"17".to_string(),"z".to_string(),"18".to_string(),"1e".to_string(),"12".to_string(),"k".to_string(),
|
|
||||||
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"1k".to_string(),"14".to_string(),"15".to_string(),"16".to_string(),"1h".to_string(),"z".to_string(),"k".to_string(),
|
|
||||||
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"10".to_string(),"1d".to_string(),"1v".to_string(),"1r".to_string(),"1s".to_string(),"1r".to_string(),"1q".to_string(),"1z".to_string(),"k".to_string(),
|
|
||||||
"k".to_string(),"z".to_string(),"z".to_string(),"12".to_string(),"10".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"1i".to_string(),"1n".to_string(),"1o".to_string(),"1o".to_string(),"1o".to_string(),"1p".to_string(),"z".to_string(),"k".to_string(),
|
|
||||||
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"10".to_string(),"z".to_string(),"z".to_string(),"k".to_string(),
|
|
||||||
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"11".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"k".to_string(),
|
|
||||||
"k".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"z".to_string(),"12".to_string(),"z".to_string(),"z".to_string(),"10".to_string(),"12".to_string(),"k".to_string(),
|
|
||||||
"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),"k".to_string(),
|
|
||||||
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
|
||||||
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
|
||||||
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string()
|
|
||||||
],
|
|
||||||
items,
|
|
||||||
exits,
|
|
||||||
endings
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_eq!(output, expected);
|
assert_eq!(output, expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn room_to_string(room: Room) -> String {
|
||||||
|
let mut tiles = String::new();
|
||||||
|
let mut items = String::new();
|
||||||
|
let mut exits = String::new();
|
||||||
|
let mut endings = String::new();
|
||||||
|
|
||||||
|
let sqrt = (room.tiles.len() as f64).sqrt() as usize; // 8 for SD, 16 for HD
|
||||||
|
for line in room.tiles.chunks(sqrt) {
|
||||||
|
for tile in line {
|
||||||
|
tiles.push_str(&format!("{},", tile));
|
||||||
|
}
|
||||||
|
tiles.pop(); // remove trailing comma
|
||||||
|
tiles.push_str("\n");
|
||||||
|
}
|
||||||
|
tiles.pop(); // remove trailing newline
|
||||||
|
|
||||||
|
for (position, item) in room.items {
|
||||||
|
items.push_str(&format!("\nITM {} {}", item, position_to_string(position)));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (position, exit) in room.exits {
|
||||||
|
exits.push_str(
|
||||||
|
&format!("\nEXT {} {}", position_to_string(position), exit_to_string(exit))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (position, ending) in room.endings {
|
||||||
|
endings.push_str(&format!("\nEND {} {}", ending, position_to_string(position)));
|
||||||
|
}
|
||||||
|
|
||||||
|
format!(
|
||||||
|
"ROOM {}\n{}{}{}{}{}\nPAL {}",
|
||||||
|
room.id,
|
||||||
|
tiles,
|
||||||
|
if room.name.is_some() {format!("\nNAME {}", room.name.unwrap())} else {"".to_string()},
|
||||||
|
items,
|
||||||
|
exits,
|
||||||
|
endings,
|
||||||
|
room.palette
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_room_to_string() {
|
||||||
|
assert_eq!( room_to_string(test_room()), test_room_string());
|
||||||
|
}
|
||||||
|
|
||||||
// fn game_from_string(game: String ) -> Game {
|
// fn game_from_string(game: String ) -> Game {
|
||||||
// // probably needs to split the game data into different segments starting from the end
|
// // probably needs to split the game data into different segments starting from the end
|
||||||
// // e.g. VAR... then END... then DLG...
|
// // e.g. VAR... then END... then DLG...
|
||||||
|
|
Loading…
Reference in New Issue