æè¿ãããå€ãã®å Žåãç¹å®ã®éæ³ã®ããŒã«ãžã®åç
§ããããŸã-ããããã£ã«åºã¥ãããã¹ãïŒè±èªã®æç®ãã°ãŒã°ã«æ€çŽ¢ããå¿
èŠãããå Žåã¯ãããããã£ããŒã¹ã®ãã¹ãïŒã ãã®ãããã¯ã«é¢ããèšäºã®ã»ãšãã©ã¯ããããããã«ã¯ãŒã«ãªã¢ãããŒãã§ãããã説æããŠããŸããæ¬¡ã«ãåºæ¬çãªäŸã§ãç¹å®ã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãã®ãããªãã¹ããèšè¿°ããæ¹æ³ã瀺ããŸãã ããã«ãé©ããšç±ççãªèªè
ã¯ãããããã¹ãŠãå®è·µããããšããŸãããããããã£ã¯ã©ããããããçºæãããŠããªããšããäºå®ã«åºã¥ããŠããŸãã ãããŠãæ®å¿µãªããããã¯ãã°ãã°éäŒããŸãã ãã®èšäºã§ã¯ãå°ãç°ãªã£ãåªå
é äœä»ãã詊ã¿ãŸãã ããã§ããå€ããå°ãªããå
·äœçãªäŸããå§ããŠããããã©ããªåç©ãªã®ãã説æããŸãã ãããããã®ãããªèšäºã®äŸã¯ããŸãäžè¬çã§ã¯ãªããšæããŸãã æ¬¡ã«ããã®ã¢ãããŒãã«é¢é£ããåé¡ã®ããã€ããšããããã®è§£æ±ºæ¹æ³ãåæããŸãã ããããããã«-ããããã£ãããããã£ãããã³ããããã£ã®ã¿ãããããããã·ã¥ã§ããäŸããããŸãã é¢çœãïŒ
3ã€ã®çããã¹ãã§Key-Valueã¹ãã¬ãŒãžããã¹ããã
ããã§ãäœããã®çç±ã§ãããçš®ã®ããŒããªã¥ãŒã¹ãã¬ãŒãžãå®è£
ããå¿
èŠããããšããŸãããã ããã·ã¥ããŒãã«ã«åºã¥ãèŸæžã§ããããªãŒã«åºã¥ãèŸæžã§ããã¡ã¢ãªã«å®å
šã«ä¿åããããšãããã£ã¹ã¯ãæäœããããšãã§ããŸã-æ°ã«ããŸããã äž»ãªããšã¯ã次ã®ããšãå¯èœã«ããã€ã³ã¿ãŒãã§ãŒã¹ãå¿
èŠã§ããããšã§ãã
- ããŒã«ããå€ã®æžã蟌ã¿
- ç®çã®ããŒãæã€ãšã³ããªãååšãããã©ããã確èªããŸã
- ããŒã«ããå€ã®èªã¿åã
- èšé²ãããã¢ã€ãã ã®ãªã¹ããååŸãã
- ãªããžããªã®ã³ããŒãååŸãã
å€å
žçãªäŸããŒã¹ã®ã¢ãããŒãã§ã¯ãå
žåçãªãã¹ãã¯æ¬¡ã®ããã«ãªããŸãã
storage = Storage() storage['a'] = 42 assert len(storage) == 1 assert 'a' in storage assert storage['a'] == 42
ãŸãã¯ïŒ
storage = Storage() storage['a'] = 42 storage['b'] = 73 assert len(storage) == 2 assert 'a' in storage assert 'b' in storage assert storage['a'] == 42 assert storage['b'] == 73
ãããŠäžè¬ã«ããã®ãããªãã¹ãã¯dofigaãããå°ãå€ãæžãããšãã§ãããŸãæžãå¿
èŠããããŸãã ããã«ãå
éšå®è£
ãé£ããã»ã©ããšã«ããäœããèŠéãå¯èœæ§ãé«ããªããŸãã èŠããã«ãé·ããéå±ã§ããã°ãã°æè¬ã®ãªãä»äºã§ãã ããã誰ãã«æŒãä»ããã®ã¯ã©ããªã«çŽ æŽãããããšã§ãããïŒ ããšãã°ãã³ã³ãã¥ãŒã¿ãŒã«ãã¹ãã±ãŒã¹ãçæãããŸãã ãŸããæ¬¡ã®ãããªããšã詊ããŠãã ããã
storage = Storage() key = arbitrary_key() value = arbitrary_value() storage[key] = value assert len(storage) == 1 assert key in storage assert storage[key] == value
ããã¯æåã®ããããã£ããŒã¹ã®ãã¹ãã§ãã ããã¯ãåŸæ¥ã®ãã®ãšã»ãšãã©åãããã«èŠããŸãããå°ããªããŒãã¹ã¯ãã§ã«å°è±¡çã§ã-倩äºããå€ãåãããŠããªãããã代ããã«ä»»æã®ããŒãšå€ãè¿ã颿°ã䜿çšããŸãã å¥ã®ã¯ããã«æ·±å»ãªå©ç¹ããããŸã-äœåºŠãäœåºŠãããŸããŸãªå
¥åããŒã¿ã§å®è¡ããŠã空ã®ã¹ãã¬ãŒãžã«èŠçŽ ã远å ããããšãããšå®éã«è¿œå ãããå¥çŽããã§ãã¯ã§ããŸãã ããŠãããã¯ãã¹ãŠããŸããã£ãŠããŸããããããŸã§ã®ãšãããåŸæ¥ã®ã¢ãããŒããšæ¯èŒããŠããŸãæçšã§ã¯ãããŸããã å¥ã®ãã¹ãã远å ããŠã¿ãŸãããã
storage = arbitrary_storage() storage_copy = storage.copy() assert len(storage) == len(storage_copy) assert all(storage_copy[key] == storage[key] for key in storage) assert all(storage[key] == storage_copy[key] for key in storage_copy)
ããã§ã¯ã空ã®ã¹ãã¬ãŒãžã䜿çšãã代ããã«ãããã€ãã®ããŒã¿ã䜿çšããŠä»»æãçæãããã®ã³ããŒãå
ã®ã³ããŒãšåäžã§ããããšã確èªããŸãã ã¯ãããžã§ãã¬ãŒã¿ãŒã¯æœåšçã«ãã°ã®ãããããªãã¯APIã䜿çšããŠäœæããå¿
èŠããããŸãããååãšããŠããã¯ããã»ã©é£ããã¿ã¹ã¯ã§ã¯ãããŸããã åæã«ãå®è£
ã«é倧ãªãã°ãããå Žåãçæããã»ã¹äžã«ãã©ãŒã«ãéå§ãããå¯èœæ§ãé«ããããããã¯äžçš®ã®ããŒãã¹ã¹ã¢ãŒã¯ãã¹ããšèŠãªãããšãã§ããŸãã ãããä»ãç§ãã¡ã¯ç¢ºä¿¡ããããšãã§ããŸã-ãžã§ãã¬ãŒã¿ãŒãæäŸããããšãã§ãããã¹ãŠãæ£ããã³ããŒãããŸãã ãããŠãæåã®ãã¹ãã®ãããã§ããžã§ãã¬ãŒã¿ãŒãå°ãªããšã1ã€ã®èŠçŽ ã§ã¹ãã¬ãŒãžãäœæã§ããããšã確信ããŠããŸãã æ¬¡ã®ãã¹ãã®æéã§ãïŒ åæã«ããžã§ãã¬ãŒã¿ãŒãåå©çšããŸãã
storage = arbitrary_storage() backup = storage.copy() key = arbitrary_key() value = arbitrary_value() if key in storage: return storage[key] = value assert len(storage) == len(backup) + 1 assert key in storage assert storage[key] == value assert all(storage[key] == backup[key] for key in backup)
ä»»æã®ã¹ãã¬ãŒãžãååŸããããã«å¥ã®èŠçŽ ã远å ã§ããããšã確èªããŸãã ãã®ããããžã§ãã¬ãŒã¿ã¯2ã€ã®èŠçŽ ãæã€ãªããžããªãäœæã§ããŸãã ãŸããèŠçŽ ã远å ããããšãã§ããŸãã ãªã©ïŒæ°åŠçåž°çŽæ³ã®ãããªããšãããã«æãåºããŸãïŒã ãã®çµæãäœæããã3ã€ã®ãã¹ããšãžã§ãã¬ãŒã¿ãŒã«ãããä»»æã®æ°ã®ç°ãªãèŠçŽ ããªããžããªã«è¿œå ã§ããããšã確å®ã«æ€èšŒã§ããŸãã çããã¹ãã¯3ã€ã ãã§ãïŒ ããã¯åºæ¬çã«ãããããã£ããŒã¹ã®ãã¹ãã®å
šäœçãªèãæ¹ã§ãã
- ããããã£ãèŠã€ããŸã
- ããŸããŸãªããŒã¿ã®ããŒãã®ããããã£ããã§ãã¯ãã
- å©çïŒ
ãšããã§ããã®ã¢ãããŒãã¯TDDã®ååãšççŸããŸãã-ãã¹ãã¯ã³ãŒãã®åã«åãæ¹æ³ã§æžãããšãã§ããŸãïŒå°ãªããšãå人çã«ã¯ãç§ã¯éåžžãããè¡ããŸãïŒã ãã1ã€ã®ããšã¯ããã®ãããªãã¹ããã°ãªãŒã³ã«ããããšã¯ãåŸæ¥ã®ãã¹ããããã¯ããã«é£ããããšã§ãããæçµçã«æåãããšãã³ãŒããå¥çŽã®ç¹å®ã®éšåã«å®éã«æºæ ããããšã確èªããŸãã
ããã¯ãã¹ãŠé 調ã§ããã...
ããããã£ããŒã¹ã®ãã¹ãã¢ãããŒãã®ãã¹ãŠã®é
åã«ãããå€ãã®åé¡ããããŸãã ãã®éšåã§ã¯ãæãäžè¬çãªãã®ãèŠã€ããããšããŸãã ãããŠãæçšãªããããã£ãèŠã€ããããšã®å®éã®è€éãã«é¢ããåé¡ïŒæ¬¡ã®ã»ã¯ã·ã§ã³ã§èª¬æããŸãïŒã¯å¥ãšããŠãåå¿è
ã®æå€§ã®åé¡ã¯ãå€ãã®å Žåãè¯ãã«ãã¬ããžã«å¯Ÿãã誀ã£ãèªä¿¡ã§ãã å®éãäœçŸãã®ãã¹ãã±ãŒã¹ãçæããããã€ãã®ãã¹ããäœæããŸããããäœãééã£ãŠããã®ã§ããããïŒ åã®éšåã®äŸãèŠããšãå®éã«ã¯å€ãã®ããšããããŸãã ãŸããæžããããã¹ãã§ã¯ã
storage.copyïŒïŒããã€ã³ã¿ãŒãã³ããŒããã ãã§ãªããå®éã«ããã£ãŒããã³ããŒãäœæãããšããä¿èšŒã¯ãããŸããã å¥ã®ããŒã«-æ¢ããŠããããŒãã¹ãã¢ã«ãªãå Žåã
ã¹ãã¬ãŒãžã®ããŒã
Falseãè¿ããšããéåžžã®æ€èšŒã¯ãããŸããã ãããŠãªã¹ãã¯ç¶ããŸãã ããŠãç§ã®ãæ°ã«å
¥ãã®äŸã®1ã€ã§ãããœãŒããäœæãããšããŸããããäœããã®çç±ã§ãèŠçŽ ã®é åºããã§ãã¯ãã1ã€ã®ãã¹ãã§ååã ãšæããŸãã
input = arbitrary_list() output = sort(input) assert all(a <= b for a, b in zip(output, output[1:]))
ãããŠããã®ãããªå®è£
ã¯å®å
šã«åæ ŒããŸã
def sort(input): return [1, 2, 3]
ããã§ã®ã¢ã©ã«ãæç¢ºã§ããããšãé¡ã£ãŠããŸãã
ããæå³ã§åã®2ã€ã®çµæãšåŒã¶ããšãã§ããæ¬¡ã®åé¡ã¯ãããããã£ããŒã¹ã®ãã¹ãã䜿çšããããšã¯ãçã«å®å
šãªã«ãã¬ããžãéæããã®ãéåžžã«é£ããããšãå€ããšããããšã§ãã ããããç§ã®æèŠã§ã¯ãããã¯éåžžã«ç°¡åã«è§£æ±ºãããŸã-ããããã£ã«åºã¥ãããã¹ãã ããæžãå¿
èŠã¯ãªãã誰ãåŸæ¥ã®ãã¹ãããã£ã³ã»ã«ããŸããã§ããã ããã«ã人ã
ã¯ãå
·äœçãªäŸã§ç©äºãçè§£ããã®ãã¯ããã«ç°¡åã«ãªãããã«é
眮ãããŠãããäž¡æ¹ã®ã¢ãããŒãã䜿çšããããšãæ¯æããŠããŸãã äžè¬çã«ãç§ã¯æ¬¡ã®ã¢ã«ãŽãªãºã ãã»ãŒéçºããŸãããéåžžã«åçŽãªåŸæ¥ã®ãã¹ããèšè¿°ããçæ³çã«ã¯APIã®äœ¿ç𿹿³ã®äŸãšããŠåœ¹ç«ã€ããã«ããŸãã ãææžåã®ããã®ããã¹ãã§ååã§ãããšæãããããã«ãå®å
šãªã«ãã¬ããžããã¯ã»ã©é ã-ããããã£ã«åºã¥ãããã¹ãã®è¿œå ãéå§ããŸãã
ãã¬ãŒã ã¯ãŒã¯ã®åé¡ããããã«äœãæåŸ
ããã®ãããªãããããå¿
èŠãªã®ãã«ã€ããŠã§ããçµå±ã®ãšããã誰ãããªãã®æã§ãµã€ã¯ã«ããã¹ãããããšãçŠããŸããã å®éãåã³ã¯ãã¹ãã®æåã®ç§ãŸã§ã§ãããCIã§ã§ã¯ãªããããŒã«ã«ã§ããå Žåã¯è¯ãããšã§ãã ãŸããããããã£ããŒã¹ã®ãã¹ãã¯ã©ã³ãã åãããŠããããããããããããã±ãŒã¹ã確å®ã«åçŸããæ¹æ³ãå¿
èŠã§ãããŸããèªå°å¿ã®ãããã¬ãŒã ã¯ãŒã¯ã§ãããè¡ãããšãã§ããŸãã æãäžè¬çãªã¢ãããŒãã¯ãç¹å®ã®ã·ãŒããã³ã³ãœãŒã«ã«åºåããããšã§ãããã¹ãã©ã³ããŒã§æåã§ããŒã ãªãããããããã±ãŒã¹ã確å®ã«åçïŒãããã°ã«äŸ¿å©ïŒãããããã¹ãéå§æã«æåã«èªåçã«ãã§ãã¯ããããäžè¯ãsidã§ãã£ã¹ã¯ã«ãã£ãã·ã¥ãäœæããŸãïŒ CIã®åçŸæ§ã«åœ¹ç«ã¡ãŸãïŒã ãã1ã€ã®éèŠãªåŽé¢ã¯ãããŒã¿ã®çž®å°ïŒå€éšãœãŒã¹ã®çž®å°ïŒã§ãã ããŒã¿ã¯ã©ã³ãã ã«çæããããããã€ãŸãã1000èŠçŽ ã®ã³ã³ããã䜿çšããèœäžãã¹ãã±ãŒã¹ã«å®å
šã«åœã®ãã£ã³ã¹ãåœãŠãããšãã§ããŸãããããã¯äŸç¶ãšããŠãããã°ã®ãåã³ãã§ãã ãããã£ãŠãfeylyaschyã±ãŒã¹ãæ€åºããåŸã®åªãããã¬ãŒã ã¯ãŒã¯ã¯ãããã³ã³ãã¯ããªå
¥åããŒã¿ã®ã»ãããæ€åºããããšããå€ãã®ãã¥ãŒãªã¹ãã£ãã¯ãé©çšããŸãããããã§ããã¹ãã¯ã¯ã©ãã·ã¥ãç¶ããŸãã æåŸã«-å€ãã®å Žåããã¹ãæ©èœã®ååã¯å
¥åããŒã¿ãžã§ãã¬ãŒã¿ãŒã§ãããããåçŽãªãžã§ãã¬ãŒã¿ãŒããããè€éãªãã®ããã°ããæ§ç¯ã§ããçµã¿èŸŒã¿ãžã§ãã¬ãŒã¿ãŒãšããªããã£ãã®ååšãéåžžã«åœ¹ç«ã¡ãŸãã
ãŸããããããã£ã«åºã¥ãè«çãã¹ããå€ããããšããæ¹å€ãææãããŸãã ãã ããããã«ã¯éåžžãæ¬¡ã®ã¹ã¿ã€ã«ã®äŸã䌎ããŸãã
data = totally_arbitrary_data() perform_actions(sut, data) if is_category_a(data): assert property_a_holds(sut) else if is is_category_b(data): assert property_b_holds(sut)
å®éãïŒåå¿è
åãã®ïŒã¢ã³ããã¿ãŒã³ã¯éåžžã«äžè¬çã§ãããããããªãã§ãã ããïŒ ãã®ãããªãã¹ãã2ã€ã®ç°ãªããã¹ãã«åå²ãããããã«å°éããå¯èœæ§ãå°ããå Žåã¯äžé©åãªå
¥åããŒã¿ïŒå€ãã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãã®ããã®ç¹å¥ãªããŒã«ããããŸãïŒãã¹ãããããããããã«é©åãªããŒã¿ã®ã¿ãçæããããç¹æ®ãªãžã§ãã¬ãŒã¿ãŒã䜿çšããããšããå§ãããŸãã çµæã¯æ¬¡ã®ããã«ãªããŸã
data = totally_arbitrary_data() assume(is_category_a(data)) perform_actions(sut, data) assert property_a_holds(sut)
ãããŠ
data = data_from_category_b() perform_actions(sut, data) assert property_b_holds(sut)
æçšãªç¹æ§ãšãã®çæ¯å°
ããŠãããããã£ã«åºã¥ããŠãã¹ãããã®ã«äœã䟿å©ã§ãããäž»ãªèœãšãç©ŽãæŽçãããŠããããšã¯æããã§ã...ããããäž»ãªããšã¯ãŸã æç¢ºã§ã¯ãããŸãã-ãããã®åãããããã£ãã©ãããååŸããã®ã§ããïŒ æ€çŽ¢ããŠã¿ãŸãããã
å°ãªããšãèœã¡ãªãã§
æãç°¡åãªãªãã·ã§ã³ã¯ããã¹ãäžã®ã·ã¹ãã ã«ä»»æã®ããŒã¿ãæŒã蟌ã¿ãã¯ã©ãã·ã¥ããªãããšã確èªããããšã§ãã å®éãããã¯ãã¡ãã·ã§ããã«ãªååãã¡ãžã³ã°ãåãããŸã£ããå¥ã®æ¹åã§ããå°çšããŒã«ïŒããšãã°ãAFLå¥åAmerican Fuzzy LopïŒããããŸãããããçšåºŠæ¡åŒµãããšãããããã£ã«åºã¥ãããã¹ãã®ç¹å¥ãªã±ãŒã¹ãšèŠãªãããšãã§ããŸããç»ã£ãŠããªãå Žåã¯ãããããå§ããããšãã§ããŸãã ããã«ãããããããååãšããŠãä»ã®ããããã£ããã§ãã¯ãããšãã«æœåšçãªäœäžãéåžžéåžžã«ããåºãã®ã§ãæç€ºçã«ãã®ãããªãã¹ãã¯ã»ãšãã©æå³ããããŸããã ãã®ãããããã£ãã«èšåããäž»ãªçç±ã¯ãèªè
ããã¡ã¶ãŒãç¹ã«AFLïŒãã®ãããã¯ã«é¢ããè±èªã®èšäºããããããããŸãïŒã«å°ããç»åã宿ãããããšã§ãã
ãã¹ããªã©ã¯ã«
æãéå±ãªããããã£ã®1ã€ã§ãããå®éã«ã¯éåžžã«åŒ·åãªãã®ã§ãèŠãããããã¯ããã«é »ç¹ã«äœ¿çšã§ããŸãã ã¢ã€ãã¢ã¯ãåãããšãè¡ããç°ãªãæ¹æ³ã§å®è¡ããã2ã€ã®ã³ãŒããããå Žåããããšããããšã§ãã ãããŠãç¹ã«ãä»»æã®å
¥åããŒã¿ãçæããããšãçè§£ã§ãããäž¡æ¹ã®ãªãã·ã§ã³ã§ããããçªãåºããçµæãäžèŽããããšã確èªã§ããŸãã æãé »ç¹ã«åŒçšãããã¢ããªã±ãŒã·ã§ã³ã®äŸã¯ãæé©åãããããŒãžã§ã³ã®é¢æ°ãèšè¿°ããŠãäœéã ãåçŽãªãªãã·ã§ã³ãæ®ããããã«å¯ŸããŠãã¹ããå®è¡ããå Žåã§ãã
input = arbitrary_list() assert quick_sort(input) == bubble_sort(input)
ãã ãããã®ããããã£ã®é©çšç¯å²ã¯ããã«éå®ãããŸããã ããšãã°ãéåžžã«å€ãã®å Žåããã¹ãããã·ã¹ãã ã«ãã£ãŠå®è£
ãããæ©èœã¯ããã§ã«æšæºèšèªã©ã€ãã©ãªã§ãå®è£
ãããŠãããã®ã®ã¹ãŒããŒã»ããã§ããããšãããããŸãã ç¹ã«ãéåžžãããŒå€ã¹ãã¬ãŒãžïŒããªãŒãããã·ã¥ããŒãã«ããŸãã¯ããŒã¯ã«ãããªã·ã¢ããªãŒãªã©ã®ãšããŸããã¯ãªããŒã¿æ§é ã«åºã¥ãã¡ã¢ãªãŸãã¯ãã£ã¹ã¯ïŒã®ã»ãšãã©ã®æ©èœã¯ãæšæºã®æšæºèŸæžã§ãã¹ãã§ããŸãã ããããçš®é¡ã®CRUDã®ãã¹ã-ããã«ããããŸãã
ç§ãå人çã«äœ¿çšããå¥ã®è峿·±ãã¢ããªã±ãŒã·ã§ã³-ã·ã¹ãã ã®æ°å€ã¢ãã«ãå®è£
ãããšãã«ãç¹å¥ãªã±ãŒã¹ãåæçã«èšç®ããã·ãã¥ã¬ãŒã·ã§ã³çµæãšæ¯èŒã§ããŸãã ãã®å ŽåãååãšããŠãå®å
šã«ä»»æã®ããŒã¿ãå
¥åã«æŒã蟌ãããšãããšãæ£ããå®è£
ã§ãã£ãŠããæ°å€è§£æ³ã®éããã粟床ïŒãããã£ãŠãé©çšå¯èœæ§ïŒã®ããã«ãã¹ããäœäžãå§ããŸããã修埩ã®éçšã§ãçæãããå
¥åããŒã¿ã«å¶éã課ãããšã«ããããããã®åãå¶éç¥ãããããã«ãªãã
èŠä»¶ãšäžå€æ¡ä»¶
ããã§ã®äž»ãªèãæ¹ã¯ãå€ãã®å ŽåãèŠä»¶èªäœãããããã£ãšããŠäœ¿ããããããã«å®åŒåããããšããããšã§ãã ãã®ãããªãããã¯ã«é¢ããããã€ãã®èšäºã§ã¯ãäžå€æ¡ä»¶ãåå¥ã«åŒ·èª¿ãããŠããŸãããç§ã®æèŠã§ã¯ããããã®äžå€æ¡ä»¶ã®ã»ãšãã©ã¯èŠä»¶ã®çŽæ¥ã®çµæã§ãããããããã®å¢çã¯äžå®å®ã§ãã
ããããã£ã®ãã§ãã¯ã«é©ããããŸããŸãªåéã®äŸã®å°ããªãªã¹ãïŒ
- ã¯ã©ã¹ãã£ãŒã«ãã«ã¯ã以åã«å²ãåœãŠãããå€ïŒgetter-setterïŒãå¿
èŠã§ã
- ãªããžããªã¯ã以åã«èšé²ãããã¢ã€ãã ãèªã¿åããå¿
èŠããããŸã
- 以åã«ååšããªãã¢ã€ãã ããªããžããªã«è¿œå ããŠãã以åã«è¿œå ãããã¢ã€ãã ã«ã¯åœ±é¿ããŸãã
- å€ãã®èŸæžã§ã¯ãåãããŒãæã€ããã€ãã®ç°ãªãèŠçŽ ãä¿åã§ããŸãã
- ãã©ã³ã¹ã®åããæšã®é«ãã¯ãã以äžãªã ã©ãã§ -èšé²ãããã¢ã€ãã ã®æ°
- ãœãŒãçµæã¯ãé åºä»ããããã¢ã€ãã ã®ãªã¹ãã§ã
- base64ãšã³ã³ãŒãçµæã«ã¯base64æåã®ã¿ãå«ããå¿
èŠããããŸã
- ã«ãŒãæ§ç¯ã¢ã«ãŽãªãºã ã¯ããã€ã³ãAãããã€ã³ãBã«è³ãäžé£ã®èš±å®¹ãããåããè¿ãå¿
èŠããããŸã
- æ§ç¯ããã茪éã®ãã¹ãŠã®ç¹ãæºããããå¿
èŠããããŸã
- é»åçœ²åæ€èšŒã¢ã«ãŽãªãºã ã¯ã眲åãæ¬ç©ã§ããã°Trueã ãããã§ãªããã°Falseãè¿ãå¿
èŠããããŸã
- æ£èŠçŽäº€åã®çµæãšããŠãåºåºå
ã®ãã¹ãŠã®ãã¯ãã«ã¯åäœé·ããšãŒãã®çžäºã¹ã«ã©ãŒç©ãæããªããã°ãªããŸãã
- ãã¯ãã«è»¢éããã³å転æäœã¯ããã®é·ãã倿ŽããŠã¯ãªããŸãã
ååãšããŠãããã§ã¯ãã¹ãŠãå®äºããŠãããèšäºãå®äºããŠããããã¹ããªã©ã¯ã«ã䜿çšããããŸãã¯èŠä»¶å
ã®ããããã£ãæ¢ããšèšãããšãã§ããŸãããå¥ã«è峿·±ããç¹æ®ãªã±ãŒã¹ããããã€ããããŸãã
èªå°ãšç¶æ
ã®ãã¹ã
å Žåã«ãã£ãŠã¯ãç¶æ
ã§äœãããã¹ãããå¿
èŠããããŸãã ãã®å Žåãæãç°¡åãªæ¹æ³ïŒ
- åæç¶æ
ã®æ£ç¢ºæ§ããã§ãã¯ãããã¹ããäœæããŸãïŒããšãã°ãäœæããã°ããã®ã³ã³ãããŒã空ã§ããããšãªã©ïŒ
- äžé£ã®ã©ã³ãã æäœã䜿çšããŠã·ã¹ãã ãä»»æã®ç¶æ
ã«ãããžã§ãã¬ãŒã¿ãŒãäœæãã
- ãžã§ãã¬ãŒã¿ãŒã®çµæãåæç¶æ
ãšããŠäœ¿çšããŠããã¹ãŠã®æäœã®ãã¹ããèšè¿°ããŸã
æ°åŠçåž°çŽæ³ã«éåžžã«äŒŒãŠããŸãïŒ
- ã¹ããŒãã¡ã³ã1ã蚌æãã
- ã¹ããŒãã¡ã³ãNãçã§ãããšä»®å®ããŠãã¹ããŒãã¡ã³ãN + 1ã蚌æãã
å¥ã®æ¹æ³ïŒç Žæããå Žæã«ã€ããŠããå°ãæ
å ±ãæäŸããããšããããŸãïŒã¯ã蚱容å¯èœãªã€ãã³ãã·ãŒã±ã³ã¹ãçæãããã¹ãäžã®ã·ã¹ãã ã«é©çšããŠãåã¹ãããã®åŸã«ããããã£ããã§ãã¯ããããšã§ãã
ååŸã«
çªç¶ãããã€ãã®ããŒã¿ã®çŽæ¥ããã³é倿ã®ããã«ããã€ãã®é¢æ°ããã¹ãããå¿
èŠããã£ãå Žåãéåžžã«å¹žéã ãšèããŠãã ããïŒ
input = arbitrary_data() assert decode(encode(input)) == input
ãã¹ãã«æé©ïŒ
- ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³-ãã·ãªã¢ã©ã€ãŒãŒã·ã§ã³
- æå·è§£èª
- ãšã³ã³ãŒã-ãã³ãŒã
- åºæ¬è¡åãåå
æ°ã«ããŸãã¯ãã®éã«å€æããŸã
- çŽæ¥ããã³é座æšå€æ
- çŽæ¥ããã³éããŒãªãšå€æ
ç¹å¥ã§ãããè峿·±ãã±ãŒã¹ã¯å転ã§ãïŒ
input = arbitrary_data() assert invert(invert(input)) == input
é¡èãªäŸã¯ããããªãã¯ã¹ã®å転ãŸãã¯è»¢çœ®ã§ãã
ã¹ãç
äžéšã®æäœã¯ãç¹°ãè¿ã䜿çšããçµæã倿ŽããŸããã å
žåçãªäŸïŒ
- ä»åã
- ãã¯ãã«ãšåºåºã®ããããçš®é¡ã®æ£èŠå
- æ¢åã®ã¢ã€ãã ãã»ãããŸãã¯èŸæžã«å远å ãã
- ãªããžã§ã¯ãã®äžéšã®ããããã£ã«åãããŒã¿ãåèšé²ãã
- æšæºåœ¢åŒãžã®ããŒã¿ã®ãã£ã¹ãïŒJSONã®ã¹ããŒã¹ã¯ãããšãã°çµ±äžãããã¹ã¿ã€ã«ã«ã€ãªãããŸãïŒ
éåžžã®
ãã³ãŒãïŒãšã³ã³ãŒãïŒå
¥åïŒïŒ==å
¥åã¡ãœããããåçã®å
¥åããŒã¿ã®è¡šçŸãç°ãªãããã«é©åã§ãªãå Žåãdueçæ§ã䜿çšããŠã·ãªã¢ã«å-éã·ãªã¢ã«åããã¹ãããããšãã§ããŸãïŒJSONã®äœåãªã¹ããŒã¹ïŒïŒ
def normalize(input): return decode(encode(input)) input = arbitrary_data() assert normalize(normalize(input)) == normalize(input)
ããŸããŸãªæ¹æ³ã1ã€ã®çµæ
ããã§ã®ã¢ã€ãã¢ã¯ãåãããšãè¡ãããã®æ¹æ³ãããã€ãããããšããããšããäºå®ãå©çšããããšã«èŠçŽãããŸãã ããã¯ãã¹ããªã©ã¯ã«ã®ç¹æ®ãªã±ãŒã¹ã®ããã«èŠãããããããŸããããå®éã«ã¯ããã§ã¯ãããŸããã æãç°¡åãªäŸã¯ãããã€ãã®æäœã®å¯ææ§ã䜿çšããŠããŸãã
a = arbitrary_value() b = arbitrary_value() assert a + b == b + a
äºçްãªããšã®ããã«æãããããããŸããããããã¯ãã¹ãããã®ã«æé©ãªæ¹æ³ã§ãã
- éæšæºè¡šçŸã§ã®æ°å€ã®å ç®ãšä¹ç®ïŒbigintãæçæ°ãããã ãã§ãïŒ
- æéäœã®æ¥åæ²ç·äžã®ç¹ã®ã远å ãïŒããã«ã¡ã¯ãæå·ïŒïŒ
- ã»ããã®éåïŒå
éšã§ã¯å®å
šã«éèªæãªããŒã¿æ§é ãæã€ããšãã§ããŸãïŒ
ããã«ãèŸæžãžã®èŠçŽ ã®è¿œå ã«ã¯åãããããã£ããããŸãã
A = dict() A[key_a] = value_a A[key_b] = value_b B = dict() B[key_b] = value_b B[key_a] = value_a assert A == B
ãã®ãªãã·ã§ã³ã¯ãã£ãšè€éã§ã-ç§ã¯é·ãéãèšèã§ããã説æããæ¹æ³ãèããŠããŸããããæ°åŠç衚èšã ããæãæµ®ãã³ãŸãã äžè¬ã«ããã®ãããªå€æã¯äžè¬çã§ã
ããããã£ãä¿æãããã®
ãããã³åŒæ°ãšé¢æ°ã®çµæã®äž¡æ¹ãå¿
ãããåãªãæ°åã§ã¯ãªããæŒç®
ãããŠ
-ãããã®ãªããžã§ã¯ãã«å¯Ÿããããã€ãã®ãã€ããªæäœã ããã§äœããã¹ãã§ããŸããïŒ
- ããããçš®é¡ã®å¥åŠãªæ°ããã¯ãã«ãè¡åãåå
æ°ã®å ç®ãšä¹ç®ïŒ ïŒ
- ç·åœ¢æŒç®åãç¹ã«ããããçš®é¡ã®ç©åã埮åãç³ã¿èŸŒã¿ãããžã¿ã«ãã£ã«ã¿ãŒãããŒãªãšå€æãªã©ïŒ ïŒ
- ç°ãªã衚çŸã®åäžãªããžã§ã¯ãã«å¯ŸããæäœãäŸãã°
- ã©ãã§ ãã㊠åäžã®åå
æ°ã§ããã -ã¯ã©ãŒã¿ããªã³ãåçã®åºæ¬è¡åã«å€æããæäœ
- ã©ãã§ ãã㊠信å·ã¯ -ç³ã¿èŸŒã¿ -ä¹ç®ãããã³ -ããŒãªãšå€æ
ããå°ããéåžžã®ãã¿ã¹ã¯ã®äŸ-ããã€ãã®ããªãããŒãªèŸæžããŒãžã¢ã«ãŽãªãºã ããã¹ãããã«ã¯ã次ã®ãããªããšãã§ããŸãã
a = arbitrary_list_of_kv_pairs() b = arbitrary_list_of_kv_pairs() result = as_dict(a) result.merge(as_dict(b)) assert result == as_dict(a + b)
çµè«ã®ä»£ããã«
åºæ¬çã«ããã®èšäºã§äŒãããã£ãããšã¯ããã ãã§ãã ãããããããããŠãããå°ãå€ãã®äººããã®ãã¹ãŠãå®è·µãå§ããããšãé¡ã£ãŠããŸãã ã¿ã¹ã¯ãå°ãç°¡åã«ããããã«ãèšèªããšã«æå¹æ§ã®çšåºŠãç°ãªããã¬ãŒã ã¯ãŒã¯ã®ãªã¹ãã瀺ããŸãã
ãããŠãã¡ããããã€ãŠçŽ æŽãããèšäºãæžããŠããã人ã
ã«ç¹å¥ãªæè¬ãããŸããæ°å¹Žåãç§ã¯ãã®ã¢ãããŒãã«ã€ããŠåŠã³ãå¿é
ããããŠãããããã£ã«åºã¥ãããã¹ããæžãå§ããŸããã