package Ġme . kh ol . quantum Ċ Ċ import Ġme . kh ol . quantum . Q ubit . Companion . ONE Ċ import Ġme . kh ol . quantum . Q ubit . Companion . ZERO Ċ import Ġme . kh ol . quantum . math . Complex Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . hamcrest . Matchers .* Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġkotlin . math . sqrt Ċ import Ġkotlin . random . Random Ċ Ċ internal Ġclass ĠRegister Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠQ ubits Ġat Ġthe Ġends Ġof ĠZ Ġaxis ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġone Ġ= ĠRegister ( ONE ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġzero Ġ= ĠRegister ( ZERO ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠQ ubits Ġat Ġthe Ġends Ġof ĠX Ġaxis ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġplus Ġ= ĠRegister (( ZERO . ket Ġ+ ĠONE . ket ) Ġ* Ġsqrt ( 0 . 5 )) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġminus Ġ= ĠRegister (( ZERO . ket Ġ- ĠONE . ket ) Ġ* Ġsqrt ( 0 . 5 )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠQ ubits Ġat Ġthe Ġends Ġof ĠY Ġaxis ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġi Plus Ġ= ĠRegister (( ZERO . ket Ġ+ ĠONE . ket Ġ* ĠComplex . I ) Ġ* Ġsqrt ( 0 . 5 )) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġi Minus Ġ= ĠRegister (( ZERO . ket Ġ- ĠONE . ket Ġ* ĠComplex . I ) Ġ* Ġsqrt ( 0 . 5 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` All Ġstates Ġare Ġalready Ġin Ġnormalized Ġglobal Ġphases `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( one . normalized , ĠequalTo ( one )) ĊĠĠĠĠĠĠĠ ĠassertThat ( zero . normalized , ĠequalTo ( zero )) ĊĠĠĠĠĠĠĠ ĠassertThat ( plus . normalized , ĠequalTo ( plus )) ĊĠĠĠĠĠĠĠ ĠassertThat ( minus . normalized , ĠequalTo ( minus )) ĊĠĠĠĠĠĠĠ ĠassertThat ( i Plus . normalized , ĠequalTo ( i Plus )) ĊĠĠĠĠĠĠĠ ĠassertThat ( i Minus . normalized , ĠequalTo ( i Minus )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Global Ġphase Ġshifted Ġregisters Ġrepresent Ġthe Ġsame Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregister Ġ= ĠRegister ( Q ubit . random (), ĠQ ubit . random ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphase d Ġ= Ġregister Ġ* ĠComplex . from Pol ar ( Random . next Double ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( phase d . normalized , ĠequalTo ( register . normalized )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }