def test_dive_legs_travel_gas(self): """ Test dive legs calculation with travel gas """ ean36 = gas(36, 0, depth=0) ean26 = gas(26, 0, depth=30) air = gas(21, 0, depth=40) gas_list = GasList(air) gas_list.travel_gas.append(ean36) gas_list.travel_gas.append(ean26) stops = [ Stop(18, 1), Stop(15, 1), Stop(12, 2), Stop(9, 3), Stop(6, 5), ] profile = DiveProfile(ProfileType.PLANNED, gas_list, 60, 25) legs = dive_legs(profile, stops, 20) self.assertEqual(5 + 10, len(legs)) self.assertEqual((0, 30, 1.5, ean36, False), legs[0]) self.assertEqual((30, 40, 0.5, ean26, False), legs[1]) self.assertEqual((40, 60, 1, air, False), legs[2]) self.assertEqual((60, 60, 22, air, False), legs[3]) self.assertEqual((60, 18, 4.2, air, False), legs[4]) deco_legs = legs[5::2] for s, l in zip(stops, deco_legs): self.assertEqual((s.depth, s.depth, s.time, air, True), l) self.assertEqual((6, 0, 0.6, air, True), legs[-1])
def test_dive_slate_travel_no_deco(self): """ Test dive slate creation (with travel gas, no deco gas) """ ean32 = gas(32, 0, depth=0) ean30 = gas(30, 0, depth=33) ean27 = gas(27, 0, depth=37) gas_list = GasList(ean27) gas_list.travel_gas.append(ean32) gas_list.travel_gas.append(ean30) depth = 45 time = 35 descent_rate = 20 profile = DiveProfile(ProfileType.PLANNED, gas_list, depth, time) stops = [ Stop(18, 1), Stop(15, 1), Stop(12, 2), Stop(9, 3), Stop(6, 5), ] legs = dive_legs(profile, stops, descent_rate) slate = dive_slate(profile, stops, legs, descent_rate) self.assertEqual((0, None, 0, ean32), slate[0], slate) self.assertEqual((33, None, 2, ean30), slate[1], slate) self.assertEqual((37, None, 2, ean27), slate[2], slate) self.assertEqual((45, None, 35, None), slate[3], slate) self.assertEqual((18, 1, 39, None), slate[4], slate) self.assertEqual((9, 3, 46, None), slate[7], slate)
def test_dive_legs(self): """ Test dive legs calculation """ air = gas(21, 0) gas_list = GasList(air) stops = [ Stop(18, 1), Stop(15, 1), Stop(12, 2), Stop(9, 3), Stop(6, 5), ] profile = DiveProfile(ProfileType.PLANNED, gas_list, 60, 25) legs = dive_legs(profile, stops, 20) self.assertEqual(3 + 10, len(legs)) self.assertEqual((0, 60, 3, air, False), legs[0]) self.assertEqual((60, 60, 22, air, False), legs[1]) self.assertEqual((60, 18, 4.2, air, False), legs[2]) deco_legs = legs[3::2] for s, l in zip(stops, deco_legs): self.assertEqual((s.depth, s.depth, s.time, air, True), l) self.assertEqual((6, 0, 0.6, air, True), legs[-1])
def test_dive_slate(self): """ Test dive slate creation """ ean27 = gas(27, 0, depth=0) ean50 = gas(50, 0, depth=22) ean80 = gas(80, 0, depth=10) gas_list = GasList(ean27) gas_list.deco_gas.append(ean50) gas_list.deco_gas.append(ean80) depth = 45 time = 35 descent_rate = 20 profile = DiveProfile(ProfileType.PLANNED, gas_list, depth, time) stops = [ Stop(18, 1), Stop(15, 1), Stop(12, 2), Stop(9, 3), Stop(6, 5), ] legs = dive_legs(profile, stops, descent_rate) slate = dive_slate(profile, stops, legs, descent_rate) msg = '\n{}\n{}'.format(pformat(legs), pformat(slate)) self.assertEqual(8, len(slate), msg) self.assertEqual((45, None, 35, ean27), slate[0], slate) self.assertEqual((22, None, 37, ean50), slate[1], slate) # runtime = 38.7 self.assertEqual((18, 1, 39, None), slate[2], slate) # runtime = 38.7 + 1.3 self.assertEqual((15, 1, 40, None), slate[3], slate) # runtime = 40 + 2.3 self.assertEqual((12, 2, 42, None), slate[4], slate) # runtime = 42.3 + 3.3 self.assertEqual((9, 3, 46, ean80), slate[5], slate) # runtime = 45.6 + 5.3 self.assertEqual((6, 5, 51, None), slate[6], slate) # runtime = 50.9 + 0.6 = 51.4999... self.assertEqual((0, None, 51, None), slate[7], slate)
def test_dive_legs_deco_gas(self): """ Test dive legs calculation with deco gas """ air = gas(21, 0) ean50 = gas(50, 0, 22) ean80 = gas(80, 0, 10) o2 = gas(100, 0, 6) gas_list = GasList(air) gas_list.deco_gas.extend((ean50, ean80, o2)) stops = [ Stop(18, 1), Stop(15, 1), Stop(12, 2), Stop(9, 3), Stop(6, 5), ] profile = DiveProfile(ProfileType.PLANNED, gas_list, 60, 25) legs = dive_legs(profile, stops, 20) self.assertEqual(4 + 10, len(legs)) self.assertEqual((0, 60, 3, air, False), legs[0]) self.assertEqual((60, 60, 22, air, False), legs[1]) self.assertEqual((60, 22, 3.8, air, False), legs[2]) self.assertEqual((22, 18, 0.4, ean50, False), legs[3]) self.assertEqual((18, 18, 1, ean50, True), legs[4]) self.assertEqual((18, 15, 0.3, ean50, True), legs[5]) self.assertEqual((15, 15, 1, ean50, True), legs[6]) self.assertEqual((15, 12, 0.3, ean50, True), legs[7]) self.assertEqual((12, 12, 2, ean50, True), legs[8]) self.assertEqual((12, 9, 0.3, ean50, True), legs[9]) self.assertEqual((9, 9, 3, ean80, True), legs[10]) self.assertEqual((9, 6, 0.3, ean80, True), legs[11]) self.assertEqual((6, 6, 5, o2, True), legs[-2]) self.assertEqual((6, 0, 0.6, o2, True), legs[-1])