You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
5.1KB

  1. /******************************************/
  2. /*
  3. apinames.cpp
  4. by Jean Pierre Cimalando, 2018.
  5. This program tests parts of RtAudio related
  6. to API names, the conversion from name to API
  7. and vice-versa.
  8. */
  9. /******************************************/
  10. #include "RtAudio.h"
  11. #include <cctype>
  12. #include <cstdlib>
  13. #include <iostream>
  14. int test_cpp() {
  15. std::vector<RtAudio::Api> apis;
  16. RtAudio::getCompiledApi( apis );
  17. // ensure the known APIs return valid names
  18. std::cout << "API names by identifier (C++):\n";
  19. for ( size_t i = 0; i < apis.size() ; ++i ) {
  20. const std::string name = RtAudio::getApiName(apis[i]);
  21. if (name.empty()) {
  22. std::cout << "Invalid name for API " << (int)apis[i] << "\n";
  23. exit(1);
  24. }
  25. const std::string displayName = RtAudio::getApiDisplayName(apis[i]);
  26. if (displayName.empty()) {
  27. std::cout << "Invalid display name for API " << (int)apis[i] << "\n";
  28. exit(1);
  29. }
  30. std::cout << "* " << (int)apis[i] << " '" << name << "': '" << displayName << "'\n";
  31. }
  32. // ensure unknown APIs return the empty string
  33. {
  34. const std::string name = RtAudio::getApiName((RtAudio::Api)-1);
  35. if (!name.empty()) {
  36. std::cout << "Bad string for invalid API '" << name << "'\n";
  37. exit(1);
  38. }
  39. const std::string displayName = RtAudio::getApiDisplayName((RtAudio::Api)-1);
  40. if (displayName!="Unknown") {
  41. std::cout << "Bad display string for invalid API '" << displayName << "'\n";
  42. exit(1);
  43. }
  44. }
  45. // try getting API identifier by name
  46. std::cout << "API identifiers by name (C++):\n";
  47. for ( size_t i = 0; i < apis.size() ; ++i ) {
  48. std::string name = RtAudio::getApiName(apis[i]);
  49. if ( RtAudio::getCompiledApiByName(name) != apis[i] ) {
  50. std::cout << "Bad identifier for API '" << name << "'\n";
  51. exit( 1 );
  52. }
  53. std::cout << "* '" << name << "': " << (int)apis[i] << "\n";
  54. for ( size_t j = 0; j < name.size(); ++j )
  55. name[j] = (j & 1) ? toupper(name[j]) : tolower(name[j]);
  56. RtAudio::Api api = RtAudio::getCompiledApiByName(name);
  57. if ( api != RtAudio::UNSPECIFIED ) {
  58. std::cout << "Identifier " << (int)api << " for invalid API '" << name << "'\n";
  59. exit( 1 );
  60. }
  61. }
  62. // try getting an API identifier by unknown name
  63. {
  64. RtAudio::Api api;
  65. api = RtAudio::getCompiledApiByName("");
  66. if ( api != RtAudio::UNSPECIFIED ) {
  67. std::cout << "Bad identifier for unknown API name\n";
  68. exit( 1 );
  69. }
  70. }
  71. return 0;
  72. }
  73. #include "rtaudio_c.h"
  74. int test_c() {
  75. const rtaudio_api_t *apis = rtaudio_compiled_api();
  76. // ensure the known APIs return valid names
  77. std::cout << "API names by identifier (C):\n";
  78. for ( size_t i = 0; apis[i] != RTAUDIO_API_UNSPECIFIED; ++i) {
  79. const std::string name = rtaudio_api_name(apis[i]);
  80. if (name.empty()) {
  81. std::cout << "Invalid name for API " << (int)apis[i] << "\n";
  82. exit(1);
  83. }
  84. const std::string displayName = rtaudio_api_display_name(apis[i]);
  85. if (displayName.empty()) {
  86. std::cout << "Invalid display name for API " << (int)apis[i] << "\n";
  87. exit(1);
  88. }
  89. std::cout << "* " << (int)apis[i] << " '" << name << "': '" << displayName << "'\n";
  90. }
  91. // ensure unknown APIs return the empty string
  92. {
  93. const char *s = rtaudio_api_name((rtaudio_api_t)-1);
  94. const std::string name(s?s:"");
  95. if (!name.empty()) {
  96. std::cout << "Bad string for invalid API '" << name << "'\n";
  97. exit(1);
  98. }
  99. s = rtaudio_api_display_name((rtaudio_api_t)-1);
  100. const std::string displayName(s?s:"");
  101. if (displayName!="Unknown") {
  102. std::cout << "Bad display string for invalid API '" << displayName << "'\n";
  103. exit(1);
  104. }
  105. }
  106. // try getting API identifier by name
  107. std::cout << "API identifiers by name (C):\n";
  108. for ( size_t i = 0; apis[i] != RTAUDIO_API_UNSPECIFIED ; ++i ) {
  109. const char *s = rtaudio_api_name(apis[i]);
  110. std::string name(s?s:"");
  111. if ( rtaudio_compiled_api_by_name(name.c_str()) != apis[i] ) {
  112. std::cout << "Bad identifier for API '" << name << "'\n";
  113. exit( 1 );
  114. }
  115. std::cout << "* '" << name << "': " << (int)apis[i] << "\n";
  116. for ( size_t j = 0; j < name.size(); ++j )
  117. name[j] = (j & 1) ? toupper(name[j]) : tolower(name[j]);
  118. rtaudio_api_t api = rtaudio_compiled_api_by_name(name.c_str());
  119. if ( api != RTAUDIO_API_UNSPECIFIED ) {
  120. std::cout << "Identifier " << (int)api << " for invalid API '" << name << "'\n";
  121. exit( 1 );
  122. }
  123. }
  124. // try getting an API identifier by unknown name
  125. {
  126. rtaudio_api_t api;
  127. api = rtaudio_compiled_api_by_name("");
  128. if ( api != RTAUDIO_API_UNSPECIFIED ) {
  129. std::cout << "Bad identifier for unknown API name\n";
  130. exit( 1 );
  131. }
  132. }
  133. return 0;
  134. }
  135. int main()
  136. {
  137. test_cpp();
  138. test_c();
  139. }