예제 #1
0
    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])
예제 #2
0
    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)
예제 #3
0
    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])
예제 #4
0
    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)
예제 #5
0
    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])