; SPDX-License-Identifier: Apache-2.0
circuit ExpandWhens :
  module ExpandWhens :
    input clock : Clock
    input reset : UInt<1>

    node done = UInt(6)

    reg x : UInt<16>, clock with :
      reset => (reset, UInt(0))
    x <= x

    x <= UInt(2)

    ; Tricky assignment only in else
    when geq(x, UInt(1)) :
    else :
      x <= UInt(1)

    when geq(x, UInt(2)) :
      when lt(x, UInt(3)) :
        x <= UInt(3)
      else :
        x <= UInt(4)

    when reset :
    else :
      when geq(x, UInt(4)) :
        x <= UInt(6)
        when lt(x, UInt(5)) :
          x <= UInt(5)

    reg count : UInt<16>, clock with :
      reset => (reset, UInt(0))
    when neq(count, done) :
      count <= add(count, UInt(1))

    printf(clock, UInt(1), "count = %d, x = %d\n", count, x)

    when not(reset) :
      when neq(x, count) : 
        printf(clock, UInt(1), "Assertion failed! x =/= count!\n")
        stop(clock, UInt(1), 1)
      when eq(x, done) :
        stop(clock, UInt(1), 0)

     
