package Ġarrow . core . continu ations Ċ Ċ import Ġarrow . core . None Ċ import Ġarrow . core . to Option Ċ import Ġio . kot est . core . spec . style . String Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . property . Ar b Ċ import Ġio . kot est . property . ar bitrary . int Ċ import Ġio . kot est . property . ar bitrary . or Null Ċ import Ġio . kot est . property . check All Ċ Ċ class ĠOption Spec Ġ: ĠString Spec ({ ĊĠ Ġ" ensure NotNull Ġin Ġoption Ġcomputation " Ġ{ ĊĠĠĠ Ġfun Ġsquare ( i : ĠInt ): ĠInt Ġ= Ġi Ġ* Ġi ĊĠĠĠ Ġcheck All ( Ar b . int (). or Null ()) Ġ{ Ġi : ĠInt ? Ġ-> ĊĠĠĠĠĠ Ġoption Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġii Ġ= Ġi ĊĠĠĠĠĠĠĠ Ġensure NotNull ( ii ) ĊĠĠĠĠĠĠĠ Ġsquare ( ii ) Ġ// ĠSmart - cast Ġby Ġcontract ĊĠĠĠĠĠ Ġ} ĠshouldBe Ġi . to Option (). map (:: square ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ" short Ġcircuit Ġoption " Ġ{ ĊĠĠĠ Ġoption Ġ{ ĊĠĠĠĠĠ Ġval Ġnumber : ĠInt Ġ= Ġ" s ". length ĊĠĠĠĠĠ Ġensure NotNull ( number . take If Ġ{ Ġit Ġ> Ġ 1 Ġ}) ĊĠĠĠĠĠ Ġthrow ĠIllegalStateException (" This Ġshould Ġnot Ġbe Ġexecuted ") ĊĠĠĠ Ġ} ĠshouldBe ĠNone ĊĠ Ġ} ĊĊĠ Ġ" ensure NotNull Ġin Ġeager Ġoption Ġcomputation " Ġ{ ĊĠĠĠ Ġfun Ġsquare ( i : ĠInt ): ĠInt Ġ= Ġi Ġ* Ġi ĊĠĠĠ Ġcheck All ( Ar b . int (). or Null ()) Ġ{ Ġi : ĠInt ? Ġ-> ĊĠĠĠĠĠ Ġoption Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġii Ġ= Ġi ĊĠĠĠĠĠĠĠ Ġensure NotNull ( ii ) ĊĠĠĠĠĠĠĠ Ġsquare ( ii ) Ġ// ĠSmart - cast Ġby Ġcontract ĊĠĠĠĠĠ Ġ} ĠshouldBe Ġi . to Option (). map (:: square ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ" e ager Ġshort Ġcircuit Ġnull " Ġ{ ĊĠĠĠ Ġoption . e ager Ġ{ ĊĠĠĠĠĠ Ġval Ġnumber : ĠInt Ġ= Ġ" s ". length ĊĠĠĠĠĠ Ġensure NotNull ( number . take If Ġ{ Ġit Ġ> Ġ 1 Ġ}) ĊĠĠĠĠĠ Ġthrow ĠIllegalStateException (" This Ġshould Ġnot Ġbe Ġexecuted ") ĊĠĠĠ Ġ} ĠshouldBe ĠNone ĊĠ Ġ} Ċ }) Ċ