source: icGREP/icgrep-devel/icgrep/combine/propGen.cpp @ 6184

Last change on this file since 6184 was 5825, checked in by faldebey, 19 months ago

Update to CoRE testing system

File size: 2.0 KB
Line 
1#include "propGen.h"
2#include "propType.h"
3
4#include <UCD/PropertyAliases.h>
5#include <UCD/PropertyValueAliases.h>
6
7#include <string>
8#include <vector>
9#include <iostream>
10#include <stdexcept>
11#include <cstdlib>
12
13
14using namespace std;
15
16string getRandomPropValue(vector<string> values){
17       
18        if(!values.empty()){
19                int random = rand() % values.size();
20                return values[random];
21        }
22        return "";
23}
24
25string getRandomNameAlias(string prop){
26        int propCode;
27        std::vector<string> names;
28        for (const auto &p : UCD::alias_map){
29                if (p.first == prop)
30                        propCode = p.second;
31        }
32        for (const auto &p : UCD::alias_map){
33                if (p.second == propCode)
34                        names.push_back(p.first);
35        }
36        if (!names.empty()){
37                int random = rand() % names.size();
38                return names[random];
39        }
40        else return prop;
41}
42
43string getBinaryProp(){
44
45        int random = rand() % binaryProperties.size();
46        return binaryProperties[random];
47}
48
49string getEnumProp(){
50
51        int random = rand() % enumeratedProperties.size();
52        int i = 0;
53        for (const auto &prop : enumeratedProperties){
54                if (i == random){
55                        string propName = prop.first;
56                        propName = getRandomNameAlias(propName);
57
58                        string valueParam = getRandomPropValue(prop.second);
59                       
60                        return propName + "=" + valueParam;
61                }
62                i++;
63        }
64        return "";
65
66}
67
68string getNumericProp(){
69
70        int random = rand() % numericProperties.size();
71        string prop =  numericProperties[random];
72        prop = getRandomNameAlias(prop);
73        int value = rand() % 1000;
74        return prop + "=" + to_string(value);
75}
76
77string getStringProp(string regex){
78        int random = rand() % stringProperties.size();
79        string prop =  stringProperties[random];
80        prop = getRandomNameAlias(prop);
81        return prop + "=/[" + regex + "]/";
82}
83
84const string PropGen::getPropertyValue(string type, string regex){
85        if (type == "binary"){
86                return getBinaryProp();
87        }
88        else if (type == "enum"){
89                return getEnumProp();
90        }
91        else if (type == "catalog"){
92                return getEnumProp();
93        }
94        else if (type == "numeric"){
95                return getNumericProp();
96        }
97        else if (type == "string"){
98                return getStringProp(regex);
99        }
100        else {
101                throw runtime_error("Unrecognized property type.");
102        }
103}
Note: See TracBrowser for help on using the repository browser.