File: api_test.C

package info (click to toggle)
boinc 5.4.11-4%2Betch1
  • links: PTS
  • area: main
  • in suites: etch
  • size: 21,440 kB
  • ctags: 16,986
  • sloc: cpp: 70,682; ansic: 45,747; php: 35,513; xml: 10,487; sh: 9,324; python: 4,291; makefile: 1,958; asm: 1,258; perl: 914; sql: 395; csh: 126; pascal: 124
file content (109 lines) | stat: -rw-r--r-- 3,352 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Berkeley Open Infrastructure for Network Computing
// http://boinc.berkeley.edu
// Copyright (C) 2005 University of California
//
// This is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation;
// either version 2.1 of the License, or (at your option) any later version.
//
// This software is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// To view the GNU Lesser General Public License visit
// http://www.gnu.org/copyleft/lesser.html
// or write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

#include "config.h"

#include <cstdio>
#include <cstdlib>

#include "boinc_api.h"

int get_run_info(double& time, unsigned long int& counter);
void run_api_test(char* args);
int print_results(double time1, double time2,
    unsigned long int counter1, unsigned long int counter2
);
int initialize_api();

int main() {
    double time1, time2;
    unsigned long int counter1, counter2;
    if(initialize_api()) {
        fprintf(stderr, "error: could not initialize api\n");
        return 1;
    }
    run_api_test("2 100");
    get_run_info(time1, counter1);
    if(initialize_api()) {
        fprintf(stderr, "error: could not initialize api\n");
        return 1;
    }
    run_api_test("0 0");
    get_run_info(time2, counter2);
    print_results(time1, time2, counter1, counter2);
}

int get_run_info(double& time, unsigned long int& counter) {
    APP_OUT ao;
    FILE* f=fopen(APP_TO_CORE_FILE, "r");
    if(f == NULL) {
        fprintf(stderr, "error: could not open %s\n", APP_TO_CORE_FILE);
        return 1;
    }
    parse_app_file(f, ao);
    time = ao.cpu_time_at_checkpoint;
    if(fclose(f)) {
        fprintf(stderr, "error: could not close %s\n", APP_TO_CORE_FILE);
        return 1;
    }
    f=fopen("counter", "r");
    fscanf(f, "%lu", &counter);
    if(fclose(f)) {
        fprintf(stderr, "error: could not close counter\n");
        return 1;
    }
    return 0;
}

void run_api_test(char* args) {
    char buf[256];
    sprintf(buf, "../api/api_app %s", args);
    system(buf);
}

int initialize_api() {
    APP_IN ai;
    FILE* f;
    ai.graphics.xsize=0;
    ai.graphics.ysize=0;
    ai.graphics.refresh_period=0;
    ai.checkpoint_period = 1.0;
    ai.poll_period = 0;
    ai.cpu_time = 0;
    f = fopen(CORE_TO_APP_FILE, "w");
    write_core_file(f, ai);
    if(fclose(f)) {
        fprintf(stderr, "error: could not close %s\n", CORE_TO_APP_FILE);
        return 1;
    }
    return 0;
}

int print_results(double time1, double time2, unsigned long int counter1,
    unsigned long int counter2
) {
    if(counter2 < counter1) printf("api test counter did not work properly\n");
    if(time1 == 0) printf("api test did not work first time\n");
    if(time2 == 0) printf("api test did not work second time\n");
    if(counter1 == counter2) printf("api test did not resume from restart\n");
    printf("total run time for api test was %f\n", time1+time2);
    return 0;
}

const char *BOINC_RCSID_b94ec48d11 = "$Id: api_test.C,v 1.17 2005/11/21 18:34:13 korpela Exp $";