Generating Test Cases (generate() and generate_n() in C++)

2

Generating test cases for array programs can be a cumbersome process. But the generate and generate_n functions in the STL (Standard Template Library), come handy to populate the array with random values.

  • generate()

    The generate functions assigns random values provided by calling the generator function ‘gen’ to the elements in the range [begin, end). Notice that begin is included in the range but end is NOT included.

    Following code demonstrates the implementation of generate :

    // C++ program to demonstrate generate function in STL
    #include <bits/stdc++.h>     
    using namespace std;
    
    // function to generate random numbers in range [0-999] :
    int randomize() 
    {   
        return (rand() % 1000); 
    }
    
    int main () 
    {
      // for different values each time we run the code
      srand(time(NULL)); 
      
      vector<int> vect(10); // declaring the vector
    
      // Fill all elements using randomize()
      generate(vect.begin(), vect.end(), randomize);
    
      // displaying the content of vector
      for (int i=0; i<vect.size(); i++)
         cout << vect[i] << " " ;
      
      return 0;
    }
    

    Output :

    832 60 417 710 487 260 920 803 576 58
    

    NOTE : The output would be different each time we run the code because of srand. If we remove srand, we would get the same set of random numbers every time we run the code.

  •  

  • generate_n()
    The generate_n does the same job as generate upto n elements starting from the element pointed to by the begin iterator.
     
    The following code demonstrates the working of generate_n :

    // C++ program to demonstrate generate_n() function in STL
    #include <bits/stdc++.h>    
    using namespace std;
    
    // function to generate random numbers in range [0-999] :
    int randomize() 
    {   
        return (rand() % 1000); 
    }
    
    int main () 
    {
      // for different values each time we run the code 
      srand(time(NULL)); 
      
      vector<int> vect(10); // declaring the vector
    
      // Fill 6 elements from beginning using randomize()
      generate_n(vect.begin(), 6, randomize);
    
      // displaying the content of vector
      for (int i=0; i<vect.size(); i++)
        cout << vect[i] << " " ;
      
      return 0;
    }
    

    Output :

    177 567 15 922 527 4 0 0 0 0
    

    NOTE : Here also, the output would be different each time we run the code because of srand. If we remove srand, we would get the same set of random numbers every time we run the code.

 
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

GATE CS Corner    Company Wise Coding Practice

Recommended Posts:



2 Average Difficulty : 2/5.0
Based on 4 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.