Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.40 KB | None | 0 0
  1. type T = int // to allow doing new T[cap], but can be other type
  2.  
  3. class {:autocontracts} Stack
  4. {
  5.     var elems: array<T>;
  6.     var size : nat; // used size
  7.  
  8.     constructor (cap: nat)
  9.         ensures elems.Length == cap
  10.         ensures size == 0
  11.     {
  12.         elems := new T[cap];
  13.         size := 0;
  14.     }
  15.  
  16.     predicate method isEmpty()
  17.         reads this
  18.     {
  19.         size == 0
  20.     }
  21.  
  22.     predicate method isFull()
  23.         reads this
  24.     {
  25.         size == elems.Length
  26.     }
  27.  
  28.     method push(x : T)
  29.         modifies this, elems
  30.         requires size < elems.Length
  31.         ensures top() == x
  32.         ensures size == old(size) + 1
  33.         ensures forall i :: 0 <= i < size - 1 ==> elems[i] == old(elems)[i]
  34.     {
  35.         elems[size] := x;
  36.         size := size + 1;
  37.     }
  38.  
  39.     function method top(): T
  40.         reads this, elems
  41.         requires size > 0
  42.     {
  43.         elems[size - 1]
  44.     }
  45.    
  46.     method pop()
  47.         modifies this
  48.         requires size > 0
  49.         ensures size == old(size) - 1
  50.     {
  51.         size := size - 1;
  52.     }
  53.  
  54.     predicate Valid()
  55.         reads this
  56.     {
  57.         size <= elems.Length
  58.     }
  59. }
  60.  
  61. // A simple test case to check on the console.
  62. method {:verify false} Main()
  63. {
  64.     var s := new Stack(3);
  65.     s.push(1);
  66.     s.push(2);
  67.     s.push(3);
  68.     s.pop();
  69.     var x := s.top();
  70.     print "top=", x, " (should be 2)\n";
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement