Question: method BadNbr ( a: array ) returns ( bn: int ) ensures a . Length < 2 = = > bn = = - 1
method BadNbra: array returns bn: int
ensures aLength bn
ensures bn bn aLength
ensures bn forall i :: i aLength ai ai aLength:trigger ai ai aLength
Base case: if the array length is less than no bad neighbours possible.
if aLength
return ;
var n : aLength;
Check the wraparound pair last and first elements
if an a
return ;
Check for bad neighbours in consecutive pairs
var i :;
while i n
invariant i n
invariant forall j :: j i aj aj
decreases n i
if ai ai
return i ;
i : i ;
Final check to ensure all pairs are nonnegative before returning
assert forall i :: i n ai ai n:trigger ai ai n;
return ;
method TestBadNbr
Test case : Empty array
var arr : new int;
var res : BadNbrarr;
assert res;
Test case : Array with one element
var arr : new int;
arr :;
var res : BadNbrarr;
assert res;
Test case : Array with two elements where sum is negative
var arr : new int;
arr :;
arr :;
var res : BadNbrarr;
assert res;
Test case : Array with three elements and a bad neighbour pair
var arr : new int;
arr :;
arr :;
arr :;
var res : BadNbrarr;
assert res;
Test case : Array with four elements and a wraparound bad neighbour pair
var arr : new int;
arr :;
arr :;
arr :;
arr :;
var res : BadNbrarr;
assert res;
Test case : No bad neighbour
var arr : new int;
arr :;
arr :;
arr :;
var res : BadNbrarr;
assert res;
Test case : Only wraparound is a bad neighbour
var arr : new int;
arr :;
arr :;
arr :;
arr :;
var res : BadNbrarr;
assert res;
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
