summaryrefslogtreecommitdiff
path: root/tests/apinames.cpp
blob: b915ad068be4f26ba8da69e54c47c1da024c5062 (plain)
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
/******************************************/
/*
  apinames.cpp
  by Jean Pierre Cimalando, 2018.

  This program tests parts of RtAudio related
  to API names, the conversion from name to API
  and vice-versa.
*/
/******************************************/

#include "RtAudio.h"
#include <cstdlib>
#include <cctype>
#include <iostream>

int main() {
    std::vector<RtAudio::Api> apis;
    RtAudio::getCompiledApi( apis );

    // ensure the known APIs return valid names
    std::cout << "API names by identifier:\n";
    for ( size_t i = 0; i < apis.size() ; ++i ) {
        const std::string &name = RtAudio::getCompiledApiName(apis[i]);
        if (name.empty()) {
            std::cerr << "Invalid name for API " << (int)apis[i] << "\n";
            exit(1);
        }
        std::cout << "* " << (int)apis[i] << ": '" << name << "'\n";
    }

    // ensure unknown APIs return the empty string
    {
        const std::string &name = RtAudio::getCompiledApiName((RtAudio::Api)-1);
        if (!name.empty()) {
            std::cerr << "Bad string for invalid API\n";
            exit(1);
        }
    }

    // try getting API identifier by case-insensitive name
    std::cout << "API identifiers by name:\n";
    for ( size_t i = 0; i < apis.size() ; ++i ) {
        std::string name = RtAudio::getCompiledApiName(apis[i]);
        if ( RtAudio::getCompiledApiByName(name) != apis[i] ) {
            std::cerr << "Bad identifier for API '" << name << "'\n";
            exit( 1 );
        }
        std::cout << "* '" << name << "': " << (int)apis[i] << "\n";
        for ( size_t j = 0; j < name.size(); ++j )
            name[j] = (j & 1) ? toupper(name[j]) : tolower(name[j]);
        if ( RtAudio::getCompiledApiByName(name) != apis[i] ) {
            std::cerr << "Bad identifier for API '" << name << "'\n";
            exit( 1 );
        }
        std::cout << "* '" << name << "': " << (int)apis[i] << "\n";
    }

    // try getting an API identifier by unknown name
    {
        RtAudio::Api api;
        api = RtAudio::getCompiledApiByName("ALSO");
        if ( api != RtAudio::UNSPECIFIED ) {
            std::cerr << "Bad identifier for unknown API name\n";
            exit( 1 );
        }
        api = RtAudio::getCompiledApiByName("");
        if ( api != RtAudio::UNSPECIFIED ) {
            std::cerr << "Bad identifier for unknown API name\n";
            exit( 1 );
        }
    }

    return 0;
}