P.S. Here's the link that I forgot to include in the previous email:
https://github.com/Parquery/gocontracts

On Sat, 26 Jan 2019 at 08:56, Marko Ristin-Kaufmann <marko.ris...@gmail.com>
wrote:

> Hi,
> We have just released gocontracts 1.3.0.
>
> Gocontracts now support arbitrary function preambles and condition
> initialization.
>
> Function preambles are especially important if you model state transitions:
>
> // increaseFirst increases the first element of the array.//// increaseFirst 
> requires://  * len(a) > 0//// increaseFirst preamble://  oldFirst := a[0]//// 
> increaseFirst ensures://  * a[0] == oldFirst + 1func increaseFirst(a []int) {
>       // Pre-condition
>       if !(len(a) > 0) {
>               panic("Violated: len(a) > 0")
>       }
>
>       // Preamble starts.
>       oldFirst := a[0]
>       // Preamble ends.
>
>       // Post-condition
>       defer func() {
>               if !(a[0] == oldFirst + 1) {
>                       panic("Violated: a[0] == oldFirst + 1")
>               }
>       }()
>
>       // Implementation
>       a[0]++
> }
>
> Condition initialization allows you to handle maps, errors *etc.* in your
> conditions:
>
> // SomeFunc does something.//// SomeFunc requires://  * _, ok := someMap[3]; 
> okfunc SomeFunc(someMap map[string]bool) {
>       // Pre-condition
>       if _, ok := someMap[3]; !ok {
>               panic("Violated: _, ok := someMap[3]; ok")
>       }
>
>       // ...
> }
>
> I hope you find this useful. Any feedback is highly welcome!
>
> Cheers,
> Marko
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to