Use short lower-case names as API identifiers
[rtaudio-cdist.git] / tests / apinames.cpp
1 /******************************************/
2 /*
3   apinames.cpp
4   by Jean Pierre Cimalando, 2018.
5
6   This program tests parts of RtAudio related
7   to API names, the conversion from name to API
8   and vice-versa.
9 */
10 /******************************************/
11
12 #include "RtAudio.h"
13 #include <cctype>
14 #include <cstdlib>
15 #include <iostream>
16
17 int main() {
18     std::vector<RtAudio::Api> apis;
19     RtAudio::getCompiledApi( apis );
20
21     // ensure the known APIs return valid names
22     std::cout << "API names by identifier:\n";
23     for ( size_t i = 0; i < apis.size() ; ++i ) {
24         const std::string &name = RtAudio::getCompiledApiName(apis[i]);
25         if (name.empty()) {
26             std::cerr << "Invalid name for API " << (int)apis[i] << "\n";
27             exit(1);
28         }
29         const std::string &displayName = RtAudio::getCompiledApiDisplayName(apis[i]);
30         if (displayName.empty()) {
31             std::cerr << "Invalid display name for API " << (int)apis[i] << "\n";
32             exit(1);
33         }
34         std::cout << "* " << (int)apis[i] << " '" << name << "': '" << displayName << "'\n";
35     }
36
37     // ensure unknown APIs return the empty string
38     {
39         const std::string &name = RtAudio::getCompiledApiName((RtAudio::Api)-1);
40         if (!name.empty()) {
41             std::cerr << "Bad string for invalid API\n";
42             exit(1);
43         }
44         const std::string &displayName = RtAudio::getCompiledApiDisplayName((RtAudio::Api)-1);
45         if (!displayName.empty()) {
46             std::cerr << "Bad display string for invalid API\n";
47             exit(1);
48         }
49     }
50
51     // try getting API identifier by name
52     std::cout << "API identifiers by name:\n";
53     for ( size_t i = 0; i < apis.size() ; ++i ) {
54         std::string name = RtAudio::getCompiledApiName(apis[i]);
55         if ( RtAudio::getCompiledApiByName(name) != apis[i] ) {
56             std::cerr << "Bad identifier for API '" << name << "'\n";
57             exit( 1 );
58         }
59         std::cout << "* '" << name << "': " << (int)apis[i] << "\n";
60
61         for ( size_t j = 0; j < name.size(); ++j )
62             name[j] = (j & 1) ? toupper(name[j]) : tolower(name[j]);
63         RtAudio::Api api = RtAudio::getCompiledApiByName(name);
64         if ( api != RtAudio::UNSPECIFIED ) {
65             std::cerr << "Identifier " << (int)api << " for invalid API '" << name << "'\n";
66             exit( 1 );
67         }
68     }
69
70     // try getting an API identifier by unknown name
71     {
72         RtAudio::Api api;
73         api = RtAudio::getCompiledApiByName("");
74         if ( api != RtAudio::UNSPECIFIED ) {
75             std::cerr << "Bad identifier for unknown API name\n";
76             exit( 1 );
77         }
78     }
79
80     return 0;
81 }