Created
June 14, 2010 06:59
-
-
Save andresteingress/437367 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @Grab(group='org.gcontracts', module='gcontracts', version='[1.1.1,)') | |
| import org.gcontracts.annotations.* | |
| @Invariant({ elements != null }) | |
| class Stack { | |
| private List elements | |
| @Ensures({ is_empty() }) | |
| public Stack() { | |
| elements = [] | |
| } | |
| @Requires({ preElements?.size() > 0 }) | |
| @Ensures({ !is_empty() }) | |
| public Stack(List preElements) { | |
| elements = preElements | |
| } | |
| def boolean is_empty() { | |
| elements.isEmpty() | |
| } | |
| @Requires({ !is_empty() }) | |
| def last_item() { | |
| elements.last() | |
| } | |
| def count() { | |
| elements.size() | |
| } | |
| @Ensures({ result == true ? count() > 0 : count() >= 0 }) | |
| def boolean has(def item) { | |
| elements.contains(item) | |
| } | |
| @Ensures({ last_item() == item }) | |
| def put(def item) { | |
| elements.push(item) | |
| } | |
| @Requires({ !is_empty() }) | |
| @Ensures({ last_item() == item }) | |
| def replace(def item) { | |
| remove() | |
| elements.push(item) | |
| } | |
| @Requires({ !is_empty() }) | |
| @Ensures({ result != null }) | |
| def remove() { | |
| elements.pop() | |
| } | |
| def String toString() { elements.toString() } | |
| } | |
| def stack = new Stack([1,2,3,4,5]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
post-condition for replace() should be:
@ensures({ last_item() == item })