Constraints for a queue/array: Need help to understand how to implement this #3 condition

In reply to vickydhudashia:

The issue is the Max index of the queue is 20 .
So q[21] , q[22] , q[23] don’t exist

The Error arises since your constraint tries to access such invalid indexes .


Constraint  Guard  is helpful such  cases  (  Refer  LRM  for  more  info  )


 constraint q_c {
            q.size == 21;

          foreach (q[i])
          {
 	     q[i] inside {[1:4]};
           //q[i] == 1 -> q[i+1] != 1 -> q[i+2] != 1;
            if (q[i] == 1) 
           {  
              if( i <  19 )    //  Constraint  Guard
              {
                q[i+1] != 1;
                q[i+2] != 1;
              }  
           }
		
          //q[i] == 2 -> q[i+1] != 2 -> q[i+2] != 2 -> q[i+3] != 2;
 
              if (q[i] == 2) 
             {  if( i < 18 )   //  Constraint  Guard
               {
                  q[i+1] != 2;
                  q[i+2] != 2;
                  q[i+3] != 2;
                }
             }  
         }
  }