package Ġtop . vu he . controller Ċ Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . Before All Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġtop . vu he . model . entity . Formula Ċ import Ġtop . vu he . model . entity . Operator Ċ import Ġtop . vu he . model . entity . Question Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashSet Ċ Ċ class ĠQuestion Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Question Test :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġé»ĺè®¤ æ£Ģ éªĮ éĹ®é¢ĺ æķ° ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠN : ĠInt Ġ= Ġ 1 0 _ 0 0 0 ĊĊĠĠĠĠĠĠĠ Ġ@ Before All ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġbefore All () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" ãĢĮ éĹ®é¢ĺ ãĢį åįķåħĥ æµĭè¯ķ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" æ£ĢæŁ¥ éĩįå¤į ç®Ĺ å¼ı ") ĊĠĠĠ Ġfun Ġcheck Repeated Formula () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" å¼Ģå§ĭ è¿Ĳç®Ĺ å¼ı çĶŁæĪĲ ä¸į éĩįå¤į æµĭè¯ķ ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º éĹ®é¢ĺ æµģ ĊĠĠĠĠĠĠĠ Ġval Ġquestion Stream Ġ= Ġgenerate Sequence ( Question Factory . Half Half :: produce ) ĊĠĠĠĠĠĠĠ Ġquestion Stream . take ( N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach ( this :: check Every Question Repeated Formula ) ĊĊĠĠĠĠĠĠĠ Ġlog . info (" ç®Ĺ å¼ı æ£Ģæµĭ å®ĮæĪĲ ï¼Į æĹł éĩįå¤į ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" æ£ĢæŁ¥ è¿Ĳç®Ĺ ç¬¦ æķ°éĩı ") ĊĠĠĠ Ġfun Ġcheck NumberOf Operators () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" å¼Ģå§ĭ è¿Ĳç®Ĺ ç¬¦ åľ¨ æĮĩå®ļ èĮĥåĽ´ æµĭè¯ķ ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º éĹ®é¢ĺ æµģ ĊĠĠĠĠĠĠĠ Ġval Ġquestion Stream Ġ= Ġgenerate Sequence ( Question Factory . Half Half :: produce ) ĊĠĠĠĠĠĠĠ Ġquestion Stream . take ( N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach ( this :: check Every Question NumberOf Operators ) ĊĊĠĠĠĠĠĠĠ Ġlog . info (" è¿Ĳç®Ĺ ç¬¦ æ£ĢæŁ¥ å®ĮæĪĲ ï¼Į ç¬¦åĲĪ è¦ģæ±Ĥ ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Every Question Repeated Formula ( question : ĠQuestion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġæ£Ģ æŁ¥ ä¸Ģä¸ª éĹ®é¢ĺ ä¸Ń æĺ¯åĲ¦ æľī éĩįå¤į ĊĠĠĠĠĠĠĠ Ġval Ġset Ġ= ĠHashSet < Formula >() ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ è¿Ńä»£ åĻ¨ ĊĠĠĠĠĠĠĠ Ġquestion . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĸŃ è¨Ģ æĺ¯åĲ¦ åŃĺåľ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertTrue ( set . add ( it . formula )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Every Question NumberOf Operators ( question : ĠQuestion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ æĺłå°Ħ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠEnum Map < Operator , ĠLong >( Operator :: class . java ) ĊĠĠĠĠĠĠĠ Ġmap [ Operator . Minus ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmap [ Operator . Plus ] Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ è¿Ńä»£ åĻ¨ ĊĠĠĠĠĠĠĠ Ġquestion . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ·»åĬł æ¯ı ä¸Ģä¸ª è¿Ĳç®Ĺ ç¬¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Remaining Ġ{ Ġ( formula , Ġ_, Ġ_, Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ formula . op ] Ġ= Ġmap [ formula . op ] !! Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ æĸŃ è¨Ģ åĬł æ³ķ æķ°éĩı ä¸Ģèĩ´ ĊĠĠĠĠĠĠĠ ĠAssertions . assertSame ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Operator . Plus ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġ æĸŃ è¨Ģ åĩı æ³ķ æķ°éĩı ä¸Ģèĩ´ ĊĠĠĠĠĠĠĠ ĠAssertions . assertSame ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Operator . Minus ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }