예제 #1
0
    def test_circle_hold_nomisaim__window_miss(self):
        settings = StdScoreData.Settings()

        settings.require_tap_press = True
        settings.require_aim_hold = True

        # Set hitwindow ranges to what these tests have been written for
        settings.pos_hit_range = 300  # ms point of late hit window
        settings.neg_hit_range = 300  # ms point of early hit window
        settings.pos_hit_miss_range = 450  # ms point of late miss window
        settings.neg_hit_miss_range = 450  # ms point of early miss window

        settings.pos_rel_range = 500  # ms point of late release window
        settings.neg_rel_range = 500  # ms point of early release window
        settings.pos_rel_miss_range = 1000  # ms point of late release window
        settings.neg_rel_miss_range = 1000  # ms point of early release window

        settings.neg_hld_range = 50  # ms range of early hold
        settings.pos_hld_range = 1000  # ms range of late hold

        # Time:     0 ms -> 3000 ms
        # Location: At 1st hitcircle (500, 500)
        # Scoring:  Awaiting press at 1st hitcircle (1000 ms @ (500, 500))
        for ms in range(0, 3000):
            score_data = {}
            adv = StdScoreData._StdScoreData__process_hold(
                settings, score_data, self.map_data.iloc[4:].values, ms, 500,
                500, [0, 0])

            offset = ms - self.map_data.iloc[4]['time']

            self.assertEqual(adv, StdScoreData._StdScoreData__ADV_NOP,
                             f'Offset: {offset} ms')
            self.assertEqual(len(score_data), 0, f'Offset: {offset} ms')
예제 #2
0
    def test_slider_start(self):
        settings = StdScoreData.Settings()

        for require_tap_press in [True, False]:
            for require_aim_press in [True, False]:
                for miss_aim in [True, False]:
                    cursor_xy = [500, 500] if miss_aim else [0, 0]

                    settings.require_tap_press = require_tap_press
                    settings.require_aim_press = require_aim_press

                    # Set hitwindow ranges to what these tests have been written for
                    settings.neg_hit_miss_range = 450  # ms point of early miss window
                    settings.neg_hit_range = 300  # ms point of early hit window
                    settings.pos_hit_range = 300  # ms point of late hit window
                    settings.pos_hit_miss_range = 450  # ms point of late miss window

                    # Time:     0 ms -> 3000 ms
                    # Scoring:  Awaiting press at slider start (100 ms @ (0, 0))
                    for ms in range(0, 3000):
                        score_data = {}

                        adv = StdScoreData._StdScoreData__process_hold(
                            settings, score_data, self.map_data.values, ms,
                            cursor_xy[0], cursor_xy[1], [0, 0])
                        offset = ms - self.map_data.iloc[0]['time']

                        # Regardless of anythingg a tap is required and this got a hold instead
                        self.assertEqual(adv,
                                         StdScoreData._StdScoreData__ADV_NOP,
                                         f'Offset: {offset} ms')
                        self.assertEqual(len(score_data), 0,
                                         f'Offset: {offset} ms')
예제 #3
0
    def test_slider_release_hold_nomisaim__window_miss(self):
        settings = StdScoreData.Settings()

        settings.require_tap_hold = True
        settings.require_aim_hold = True

        settings.neg_hld_range = 50  # ms range of early hold
        settings.pos_hld_range = 1000  # ms range of late hold

        # Time:     0 ms -> 3000 ms
        # Location: At slider release (300, 0)
        # Scoring:  Awaiting release at slider end (750 ms @ (300, 0))
        for ms in range(0, 3000):
            score_data = {}
            adv = StdScoreData._StdScoreData__process_hold(
                settings, score_data, self.map_data.iloc[3:].values, ms, 300,
                0, [0, 0])

            offset = ms - self.map_data.iloc[3]['time']

            self.assertEqual(adv, StdScoreData._StdScoreData__ADV_NOP,
                             f'Offset: {offset} ms')
            self.assertEqual(len(score_data), 0, f'Offset: {offset} ms')
예제 #4
0
    def test_slider_hold(self):
        settings = StdScoreData.Settings()

        for require_tap_hold in [True, False]:
            for require_aim_hold in [True, False]:
                for recoverable_missaim in [True, False]:
                    for slider_miss in [True, False]:
                        for miss_aim in [True, False]:
                            cursor_xy = [1000, 1000] if miss_aim else [0, 0]

                            settings.require_tap_hold = require_tap_hold
                            settings.require_aim_hold = require_aim_hold

                            settings.recoverable_missaim = recoverable_missaim
                            settings.miss_slider = slider_miss

                            # Set hitwindow ranges to what these tests have been written for
                            self.neg_hld_range = 50
                            self.pos_hld_range = 1000

                            # Time:     0 ms -> 3000 ms
                            # Scoring:  Awaiting hold at slider aimpoint (350 ms @ (100, 0))
                            for ms in range(0, 3000):
                                score_data = {}

                                adv = StdScoreData._StdScoreData__process_hold(
                                    settings, score_data,
                                    self.map_data.iloc[1:].values, ms,
                                    cursor_xy[0], cursor_xy[1], [0, 0])
                                offset = ms - self.map_data.iloc[1]['time']

                                expected_miss_adv = StdScoreData._StdScoreData__ADV_NOTE if slider_miss else StdScoreData._StdScoreData__ADV_AIMP

                                def proc_required_tap():
                                    if offset <= -settings.neg_hld_range:
                                        self.assertEqual(
                                            adv, StdScoreData.
                                            _StdScoreData__ADV_NOP,
                                            f'Offset: {offset} ms')
                                        self.assertEqual(
                                            len(score_data), 0,
                                            f'Offset: {offset} ms')

                                    if -settings.neg_hld_range < offset <= settings.pos_hld_range:
                                        self.assertEqual(
                                            adv, StdScoreData.
                                            _StdScoreData__ADV_AIMP,
                                            f'Offset: {offset} ms')
                                        self.assertEqual(
                                            score_data[0][6],
                                            StdScoreData.TYPE_AIMH,
                                            f'Offset: {offset} ms')

                                    if settings.pos_hld_range < offset:
                                        self.assertEqual(
                                            adv, StdScoreData.
                                            _StdScoreData__ADV_NOP,
                                            f'Offset: {offset} ms')
                                        self.assertEqual(
                                            len(score_data), 0,
                                            f'Offset: {offset} ms')

                                def proc_required_aim():
                                    if settings.recoverable_missaim:
                                        if settings.pos_hld_range < offset:
                                            self.assertEqual(
                                                adv, expected_miss_adv,
                                                f'Offset: {offset} ms')
                                            self.assertEqual(
                                                score_data[0][6],
                                                StdScoreData.TYPE_MISS,
                                                f'Offset: {offset} ms')
                                        else:
                                            self.assertEqual(
                                                adv, StdScoreData.
                                                _StdScoreData__ADV_NOP,
                                                f'Offset: {offset} ms')
                                            self.assertEqual(
                                                len(score_data), 0,
                                                f'Offset: {offset} ms')

                                def proc_required_non():
                                    if offset < 0:
                                        self.assertEqual(
                                            adv, StdScoreData.
                                            _StdScoreData__ADV_NOP,
                                            f'Offset: {offset} ms')
                                        self.assertEqual(
                                            len(score_data), 0,
                                            f'Offset: {offset} ms')
                                    else:
                                        self.assertEqual(
                                            adv, StdScoreData.
                                            _StdScoreData__ADV_AIMP,
                                            f'Offset: {offset} ms')
                                        self.assertEqual(
                                            score_data[0][6],
                                            StdScoreData.TYPE_AIMH,
                                            f'Offset: {offset} ms')

                                if not require_aim_hold and not require_tap_hold:
                                    # No need to tap or aim; Automatic freebie
                                    proc_required_non()
                                    continue

                                if not require_aim_hold and require_tap_hold:
                                    proc_required_tap()
                                    continue

                                if require_aim_hold and not require_tap_hold:
                                    if miss_aim:
                                        proc_required_aim()
                                    else:
                                        proc_required_non()
                                    continue

                                if require_aim_hold and require_tap_hold:
                                    if miss_aim:
                                        proc_required_aim()
                                    else:
                                        proc_required_tap()
                                    continue