MCPcopy Index your code
hub / github.com/battlecode/battlecode-2018 / test_rocket_load

Function test_rocket_load

battlecode-engine/src/world.rs:2968–3019  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

2966
2967 #[test]
2968 fn test_rocket_load() {
2969 // Create the game world and the rocket for this test.
2970 let mut world = GameWorld::test_world();
2971 let takeoff_loc = MapLocation::new(Planet::Earth, 10, 10);
2972 let rocket = world.create_unit(Team::Red, takeoff_loc, UnitType::Rocket).unwrap();
2973 world.get_unit_mut(rocket).unwrap().be_built(1000);
2974
2975 // Correct loading.
2976 let valid_boarder = world.create_unit(Team::Red, takeoff_loc.add(Direction::North), UnitType::Knight).unwrap();
2977 assert![world.can_load(rocket, valid_boarder)];
2978 assert![world.load(rocket, valid_boarder).is_ok()];
2979 assert_eq![world.my_unit(valid_boarder).unwrap().location(), InGarrison(rocket)];
2980
2981 // Boarding fails when too far from the rocket.
2982 let invalid_boarder_too_far = world.create_unit(Team::Red, takeoff_loc.add(Direction::North).add(Direction::North), UnitType::Knight).unwrap();
2983 assert![!world.can_load(rocket, valid_boarder)];
2984 assert_err![world.load(rocket, invalid_boarder_too_far), GameError::OutOfRange];
2985
2986 // Boarding fails when the robot has already moved.
2987 assert![world.move_robot(invalid_boarder_too_far, Direction::South).is_ok()];
2988 let invalid_boarder_already_moved = invalid_boarder_too_far;
2989 assert![!world.is_move_ready(invalid_boarder_already_moved)];
2990 assert![!world.can_load(rocket, invalid_boarder_already_moved)];
2991 assert_err![world.load(rocket, invalid_boarder_already_moved), GameError::Overheated];
2992
2993 // Factories and rockets cannot board rockets.
2994 let invalid_boarder_factory = world.create_unit(Team::Red, takeoff_loc.add(Direction::Southeast), UnitType::Factory).unwrap();
2995 assert![!world.can_load(rocket, invalid_boarder_factory)];
2996 assert_err![world.load(rocket, invalid_boarder_factory), GameError::InappropriateUnitType];
2997 let invalid_boarder_rocket = world.create_unit(Team::Red, takeoff_loc.add(Direction::South), UnitType::Rocket).unwrap();
2998 assert![!world.can_load(rocket, invalid_boarder_rocket)];
2999 assert_err![world.load(rocket, invalid_boarder_rocket), GameError::InappropriateUnitType];
3000
3001 // Rockets can be loaded up to their capacity...
3002 for _ in 1..8 {
3003 let valid_extra_boarder = world.create_unit(Team::Red, takeoff_loc.add(Direction::East), UnitType::Knight).unwrap();
3004 assert![world.can_load(rocket, valid_extra_boarder)];
3005 assert![world.load(rocket, valid_extra_boarder).is_ok()];
3006 }
3007
3008 // ... but not beyond their capacity.
3009 let invalid_boarder_rocket_full = world.create_unit(Team::Red, takeoff_loc.add(Direction::East), UnitType::Knight).unwrap();
3010 assert![!world.can_load(rocket, invalid_boarder_rocket_full)];
3011 assert_err![world.load(rocket, invalid_boarder_rocket_full), GameError::GarrisonFull];
3012
3013 // A unit should not be able to board another team's rocket.
3014 let blue_takeoff_loc = MapLocation::new(Planet::Earth, 5, 5);
3015 let blue_rocket = world.create_unit(Team::Blue, blue_takeoff_loc, UnitType::Rocket).unwrap();
3016 let invalid_boarder_wrong_team = world.create_unit(Team::Red, blue_takeoff_loc.add(Direction::North), UnitType::Knight).unwrap();
3017 assert![!world.can_load(blue_rocket, invalid_boarder_wrong_team)];
3018 assert_err![world.load(blue_rocket, invalid_boarder_wrong_team), GameError::TeamNotAllowed];
3019 }
3020
3021 #[test]
3022 fn test_rocket_unload() {

Callers

nothing calls this directly

Calls 4

create_unitMethod · 0.80
be_builtMethod · 0.80
get_unit_mutMethod · 0.80
addMethod · 0.45

Tested by

no test coverage detected