test_banana.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. #!/usr/bin/env python
  2. """Tests for `banana` package."""
  3. import random
  4. import pytest
  5. from banana import AnanasCodec, AvocadoCodec, BananaCodec, RibesCodec
  6. banana_conversions = {"be": 1, "beba": 70, "zu": 69, "bezu": 139, "nana": 2485}
  7. @pytest.fixture(params=banana_conversions.items())
  8. def banana_known(request):
  9. yield request.param
  10. avocado_conversions = {
  11. "a": 0,
  12. "aca": 5,
  13. "ada": 10,
  14. "afa": 15,
  15. "aga": 20,
  16. "ala": 25,
  17. "ama": 30,
  18. "ana": 35,
  19. "apa": 40,
  20. "ara": 45,
  21. "asa": 50,
  22. "ata": 55,
  23. "ava": 60,
  24. "aza": 65,
  25. "eba": 70,
  26. "eca": 75,
  27. "eda": 80,
  28. "efa": 85,
  29. "ega": 90,
  30. }
  31. @pytest.fixture(params=avocado_conversions.items())
  32. def avocado_known(request):
  33. yield request.param
  34. ribes_conversions = {"b": 0, "c": 1, "z": 13, "beb": 14, "bec": 15}
  35. @pytest.fixture(params=ribes_conversions.items())
  36. def ribes_known(request):
  37. yield request.param
  38. ananas_conversions = {
  39. "ac": 1,
  40. "al": 5,
  41. "as": 10,
  42. "ec": 15,
  43. "em": 20,
  44. "et": 25,
  45. "id": 30,
  46. "in": 35,
  47. "iv": 40,
  48. "of": 45,
  49. "op": 50,
  50. "oz": 55,
  51. "ug": 60,
  52. "ur": 65,
  53. "acab": 70,
  54. "acal": 75,
  55. "acas": 80,
  56. "acec": 85,
  57. "acem": 90,
  58. }
  59. ananas_codec = AnanasCodec()
  60. avocado_codec = AvocadoCodec()
  61. banana_codec = BananaCodec()
  62. ribes_codec = RibesCodec()
  63. @pytest.fixture(params=ananas_conversions.items())
  64. def ananas_known(request):
  65. yield request.param
  66. def test_banana_to_dec_known(banana_known):
  67. word, value = banana_known
  68. assert banana_codec.decode(word) == value
  69. def test_dec_to_banana_known(banana_known):
  70. word, value = banana_known
  71. assert banana_codec.encode(value) == word
  72. def test_banana_is_banana(banana_known):
  73. assert banana_codec.is_valid(banana_known[0])
  74. def test_banana_is_only_banana(banana_known):
  75. assert not ribes_codec.is_valid(banana_known[0])
  76. assert not ananas_codec.is_valid(banana_known[0])
  77. assert not avocado_codec.is_valid(banana_known[0])
  78. def test_banana2dec_prefix_ba(banana_known):
  79. """un ba all'inizio non cambia nulla!"""
  80. word, value = banana_known
  81. for prefix in ("ba", "baba", "bababa"):
  82. assert banana_codec.decode(prefix + word) == value
  83. def test_ribes_to_dec_known(ribes_known):
  84. word, value = ribes_known
  85. assert ribes_codec.decode(word) == value
  86. def test_dec_to_ribes_known(ribes_known):
  87. word, value = ribes_known
  88. assert ribes_codec.encode(value) == word
  89. def test_ribes_is_ribes(ribes_known):
  90. assert ribes_codec.is_valid(ribes_known[0])
  91. def test_ribes_is_only_ribes(ribes_known):
  92. assert not banana_codec.is_valid(ribes_known[0])
  93. assert not ananas_codec.is_valid(ribes_known[0])
  94. assert not avocado_codec.is_valid(ribes_known[0])
  95. def test_avocado_to_dec_known(avocado_known):
  96. word, value = avocado_known
  97. assert avocado_codec.decode(word) == value
  98. def test_dec_to_avocado_known(avocado_known):
  99. word, value = avocado_known
  100. assert avocado_codec.encode(value) == word
  101. def test_avocado_is_avocado(avocado_known):
  102. assert avocado_codec.is_valid(avocado_known[0])
  103. def test_avocado_is_only_avocado(avocado_known):
  104. assert not ribes_codec.is_valid(avocado_known[0])
  105. assert not ananas_codec.is_valid(avocado_known[0])
  106. assert not banana_codec.is_valid(avocado_known[0])
  107. def test_ananas_to_dec_known(ananas_known):
  108. word, value = ananas_known
  109. assert ananas_codec.decode(word) == value
  110. def test_dec_to_ananas_known(ananas_known):
  111. word, value = ananas_known
  112. assert ananas_codec.encode(value) == word
  113. def test_ananas_is_ananas(ananas_known):
  114. assert ananas_codec.is_valid(ananas_known[0])
  115. def test_ananas_is_only_ananas(ananas_known):
  116. assert not ribes_codec.is_valid(ananas_known[0])
  117. assert not banana_codec.is_valid(ananas_known[0])
  118. assert not banana_codec.is_valid(ananas_known[0])
  119. def test_answer_to_life_the_universe_and_everything():
  120. banana = banana_codec.decode("banana")
  121. assert banana != 42
  122. assert banana == 2485
  123. def test_random_len_0():
  124. assert banana_codec.random(minlength=0) == ""
  125. assert ananas_codec.random(minlength=0) == ""
  126. assert avocado_codec.random(minlength=0) == ""
  127. assert ribes_codec.random(minlength=0) == ""
  128. def test_banana_random_minlength_even():
  129. for l in (0, 2, 4, 6, 8, 10, 12):
  130. assert len(banana_codec.random(minlength=l)) == l
  131. assert len(ananas_codec.random(minlength=l)) == l
  132. def test_banana_random_minlength_odd():
  133. for l in (1, 3, 5, 7, 9):
  134. assert len(banana_codec.random(minlength=l)) == l + 1
  135. assert len(ananas_codec.random(minlength=l)) == l + 1
  136. def test_ribes_random_minlength_even():
  137. for l in (2, 4, 6, 8, 10, 12):
  138. assert len(ribes_codec.random(minlength=l)) == l + 1
  139. assert len(avocado_codec.random(minlength=l)) == l + 1
  140. def test_ribes_random_minlength_odd():
  141. for l in (1, 3, 5, 7, 9):
  142. assert len(ribes_codec.random(minlength=l)) == l
  143. assert len(avocado_codec.random(minlength=l)) == l
  144. def test_random_coherence_please():
  145. for codec in (ribes_codec, ananas_codec, avocado_codec, banana_codec):
  146. for seed in range(30):
  147. word = codec.random(prng=random.Random(seed))
  148. assert codec.is_valid(word), "%s (seed %d) non valido per %s" % (
  149. word,
  150. seed,
  151. codec.__class__.__name__,
  152. )