Write constraint for an integer array with 10 elements such that exactly 3 of them are same and rest are unique

In reply to dve12:

In the second foreach you meant a[i]!=r_index1 && a[j]!=r_index1 instead of i!=r_index1 && j!=r_index1.



module abc;
  class aa;
    rand int unsigned val[10];
    rand int unsigned r_index1,r_index2,r_index3;
 
    constraint s1 {
      r_index1 inside {[0:9]};
      r_index2 inside {[0:9]};
      r_index3 inside {[0:9]};
      r_index1 != r_index2;
      r_index1 != r_index3;
      r_index3 != r_index2;
 
 
      
      foreach(val[i]){
        val[i] < 10 ;  }
 
      foreach(val[i]){
        foreach(val[j]){
          if(i != j && val[i]!=r_index1  && val[j]!=r_index1)
            val[i] != val[j];
        }
      }
 
        val[r_index1] == val[r_index2];
        val[r_index1] == val[r_index3];   
    }	
  endclass
 aa a1 ;
  initial begin
    a1 = new();
    assert(a1.randomize());
    $display(a1.r_index1, a1.r_index2,a1.r_index3);
    $display(a1.val);
  end
endmodule