Example #1
0
void test_case(const std::string& filename) {
    boost::program_options::variables_map vm;
    std::ifstream test_cases(filename);

    std::string line;
    while (std::getline(test_cases, line)) {
        // Ignore empty lines and comments
        if (line.size() < 4 || line.substr(0, 3) != "// ") {
            continue;
        }

        std::string statement = line.substr(3, std::string::npos);

        if (!std::getline(test_cases, line)) {
            std::cerr << "Unexpected end of test cases." << std::endl;
            exit(-1);
        }

        std::istringstream ss{line};
        ss.ignore(std::numeric_limits<std::streamsize>::max(), ' ');
        std::vector<int> matches;
        int match_line;

        while (ss >> match_line) {
            matches.push_back(match_line);
        }

        std::cout << "Testing: " << statement << std::endl;

        auto term = parse_search_string(statement, vm);
        auto found = find_matches(filename, term, vm);

        assert(found.size() == matches.size());
        for (std::size_t s = 0; s < found.size(); ++s) {
            assert(found[s].first.first == matches[s]);
        }

        std::cout << "  Passed" << std::endl;
    }
}
Example #2
0
int calc_piechart(char * account, char * search_string,
				  int month_number, int year,
				  char field_separator, char * currency,
				  int spending,
				  char ** fieldname, double * value,
				  double * total_value,
				  int max_fields,
				  int include_zeros)
{
	double total_receive=0, total_spend=0;
	int start_index = 0,i,j;
	char search[STRING_BLOCK];
	char name[STRING_BLOCK];
	int field_ctr=0;

	/* perform multiple searches */
	*total_value = 0;
	while (start_index < strlen(search_string)) {
		start_index = parse_search_string(search_string, ',', '|',
										  start_index, search,
										  name);
    
		get_totals(account, search, month_number,
				   year, currency,
				   &total_receive, &total_spend);

		/* set the value */
		if (spending!=0) {
			value[field_ctr] = total_spend;
		}
		else {
			value[field_ctr] = total_receive;
		}
		*total_value += value[field_ctr];

		/* set the field name */
		fieldname[field_ctr] = (char*)malloc(STRING_BLOCK);
		fieldname[field_ctr][0]=0;

		if (name[0] != 0) {
			for (i = 0; i < strlen(name); i++) {
				fieldname[field_ctr][i] = name[i];
			}
			fieldname[field_ctr][i] = 0;
		}
		else {
			j = 0;
			for (i = 0; i < strlen(search); i++) {
				if ((search[i] != '*') && (search[i] != '%')) {
					fieldname[field_ctr][j++] = search[i];
				}
			}
			fieldname[field_ctr][j] = 0;
		}
		if (fieldname[field_ctr][0] != 0) {
			fieldname[field_ctr][0] = toupper(fieldname[field_ctr][0]);
		}

		if ((include_zeros != 0) ||
			((include_zeros == 0) && (value[field_ctr] > 0))) {
			field_ctr++;
			if (field_ctr >= max_fields) break;
		}
	}

	return field_ctr;
}