package Ġme . kh ol . quantum . gate Ċ Ċ import Ġme . kh ol . quantum . Q ubit Ċ import Ġme . kh ol . quantum . math . Complex Ċ import Ġme . kh ol . quantum . math . Matrix Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . hamcrest . Matchers . equalTo Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġkotlin . math . PI Ċ Ċ class ĠGate Phase Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Phase Ġby ĠPI Ġradians Ġis ĠZ Ġgate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( Gate Phase ( PI ), ĠequalTo < Gate >( Gate Z )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Phase Ġby Ġhalf ĠPI Ġradians Ġis ĠS Ġgate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( Gate Phase ( PI Ġ/ Ġ 2 ), ĠequalTo < Gate >( Gate S )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Phase Ġby Ġquarter ĠPI Ġradians Ġis ĠT Ġgate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( Gate Phase ( PI Ġ/ Ġ 4 ), ĠequalTo < Gate >( Gate T )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Global Ġphase Ġgate Ġhas Ġno Ġobservable Ġeffect `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġq ubit Ġ= ĠQ ubit . random () ĊĠĠĠĠĠĠĠ Ġval Ġglobal Phase Gate Ġ= Ġobject Ġ: ĠGate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġq ubits : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġmatrix : ĠMatrix Ġ= ĠMatrix ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Complex . from Pol ar ( 1 . 2 3 4 ), ĠComplex . ZERO ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Complex . ZERO , ĠComplex . from Pol ar ( 1 . 2 3 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( global Phase Gate Ġ* Ġq ubit , ĠequalTo ( q ubit )) ĊĠĠĠ Ġ} Ċ } Ċ