1
0
mirror of synced 2024-11-27 23:50:47 +01:00
bemaniutils/bemani/tests/test_IIDXPendual.py

84 lines
2.3 KiB
Python

# vim: set fileencoding=utf-8
import struct
import unittest
import random
from unittest.mock import Mock
from typing import List
from bemani.backend.iidx.pendual import IIDXPendual
from bemani.data import Score
class TestIIDXPendual(unittest.TestCase):
def __make_score(self, ghost: List[int]) -> Score:
return Score(
0,
0,
0,
sum(ghost),
1234567890,
1234567890,
0,
1,
{
"ghost": bytes(ghost),
},
)
def test_average_no_scores(self) -> None:
base = IIDXPendual(Mock(), Mock(), Mock())
self.assertEqual(
base.delta_score([], 3),
(None, None),
)
def test_average_identity(self) -> None:
base = IIDXPendual(Mock(), Mock(), Mock())
self.assertEqual(
base.delta_score(
[
self.__make_score([10, 20, 30]),
],
3,
),
(60, struct.pack("bbb", *[-10, 0, 10])),
)
def test_average_basic(self) -> None:
base = IIDXPendual(Mock(), Mock(), Mock())
self.assertEqual(
base.delta_score(
[
self.__make_score([10, 20, 30]),
self.__make_score([0, 0, 0]),
],
3,
),
(30, struct.pack("bbb", *[-5, 0, 5])),
)
def test_average_complex(self) -> None:
base = IIDXPendual(Mock(), Mock(), Mock())
self.assertEqual(
base.delta_score(
[
self.__make_score([10, 20, 30]),
self.__make_score([20, 30, 40]),
self.__make_score([30, 40, 50]),
],
3,
),
(90, struct.pack("bbb", *[-10, 0, 10])),
)
def test_average_always_zero(self) -> None:
base = IIDXPendual(Mock(), Mock(), Mock())
ex_score, ghost = base.delta_score(
[
self.__make_score([random.randint(0, 10) for _ in range(64)]),
self.__make_score([random.randint(0, 10) for _ in range(64)]),
],
64,
)
self.assertEqual(sum(struct.unpack("b" * 64, ghost)), 0)