BehaviourContextTests.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. using NUnit.Framework;
  2. using Ryujinx.Audio.Renderer.Server;
  3. namespace Ryujinx.Tests.Audio.Renderer.Server
  4. {
  5. public class BehaviourContextTests
  6. {
  7. [Test]
  8. public void TestCheckFeature()
  9. {
  10. int latestRevision = BehaviourContext.BaseRevisionMagic + BehaviourContext.LastRevision;
  11. int previousRevision = BehaviourContext.BaseRevisionMagic + (BehaviourContext.LastRevision - 1);
  12. int invalidRevision = BehaviourContext.BaseRevisionMagic + (BehaviourContext.LastRevision + 1);
  13. Assert.IsTrue(BehaviourContext.CheckFeatureSupported(latestRevision, latestRevision));
  14. Assert.IsFalse(BehaviourContext.CheckFeatureSupported(previousRevision, latestRevision));
  15. Assert.IsTrue(BehaviourContext.CheckFeatureSupported(latestRevision, previousRevision));
  16. // In case we get an invalid revision, this is supposed to auto default to REV1 internally.. idk what the hell Nintendo was thinking here..
  17. Assert.IsTrue(BehaviourContext.CheckFeatureSupported(invalidRevision, latestRevision));
  18. }
  19. [Test]
  20. public void TestsMemoryPoolForceMappingEnabled()
  21. {
  22. BehaviourContext behaviourContext = new BehaviourContext();
  23. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision1);
  24. Assert.IsFalse(behaviourContext.IsMemoryPoolForceMappingEnabled());
  25. behaviourContext.UpdateFlags(0x1);
  26. Assert.IsTrue(behaviourContext.IsMemoryPoolForceMappingEnabled());
  27. }
  28. [Test]
  29. public void TestRevision1()
  30. {
  31. BehaviourContext behaviourContext = new BehaviourContext();
  32. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision1);
  33. Assert.IsFalse(behaviourContext.IsAdpcmLoopContextBugFixed());
  34. Assert.IsFalse(behaviourContext.IsSplitterSupported());
  35. Assert.IsFalse(behaviourContext.IsLongSizePreDelaySupported());
  36. Assert.IsFalse(behaviourContext.IsAudioUsbDeviceOutputSupported());
  37. Assert.IsFalse(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  38. Assert.IsFalse(behaviourContext.IsSplitterBugFixed());
  39. Assert.IsFalse(behaviourContext.IsElapsedFrameCountSupported());
  40. Assert.IsFalse(behaviourContext.IsDecodingBehaviourFlagSupported());
  41. Assert.IsFalse(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  42. Assert.IsFalse(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  43. Assert.IsFalse(behaviourContext.IsWaveBufferVersion2Supported());
  44. Assert.IsFalse(behaviourContext.IsEffectInfoVersion2Supported());
  45. Assert.IsFalse(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  46. Assert.AreEqual(0.70f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  47. Assert.AreEqual(1, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  48. Assert.AreEqual(1, behaviourContext.GetPerformanceMetricsDataFormat());
  49. }
  50. [Test]
  51. public void TestRevision2()
  52. {
  53. BehaviourContext behaviourContext = new BehaviourContext();
  54. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision2);
  55. Assert.IsTrue(behaviourContext.IsAdpcmLoopContextBugFixed());
  56. Assert.IsTrue(behaviourContext.IsSplitterSupported());
  57. Assert.IsFalse(behaviourContext.IsLongSizePreDelaySupported());
  58. Assert.IsFalse(behaviourContext.IsAudioUsbDeviceOutputSupported());
  59. Assert.IsFalse(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  60. Assert.IsFalse(behaviourContext.IsSplitterBugFixed());
  61. Assert.IsFalse(behaviourContext.IsElapsedFrameCountSupported());
  62. Assert.IsFalse(behaviourContext.IsDecodingBehaviourFlagSupported());
  63. Assert.IsFalse(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  64. Assert.IsFalse(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  65. Assert.IsFalse(behaviourContext.IsWaveBufferVersion2Supported());
  66. Assert.IsFalse(behaviourContext.IsEffectInfoVersion2Supported());
  67. Assert.IsFalse(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  68. Assert.AreEqual(0.70f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  69. Assert.AreEqual(1, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  70. Assert.AreEqual(1, behaviourContext.GetPerformanceMetricsDataFormat());
  71. }
  72. [Test]
  73. public void TestRevision3()
  74. {
  75. BehaviourContext behaviourContext = new BehaviourContext();
  76. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision3);
  77. Assert.IsTrue(behaviourContext.IsAdpcmLoopContextBugFixed());
  78. Assert.IsTrue(behaviourContext.IsSplitterSupported());
  79. Assert.IsTrue(behaviourContext.IsLongSizePreDelaySupported());
  80. Assert.IsFalse(behaviourContext.IsAudioUsbDeviceOutputSupported());
  81. Assert.IsFalse(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  82. Assert.IsFalse(behaviourContext.IsSplitterBugFixed());
  83. Assert.IsFalse(behaviourContext.IsElapsedFrameCountSupported());
  84. Assert.IsFalse(behaviourContext.IsDecodingBehaviourFlagSupported());
  85. Assert.IsFalse(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  86. Assert.IsFalse(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  87. Assert.IsFalse(behaviourContext.IsWaveBufferVersion2Supported());
  88. Assert.IsFalse(behaviourContext.IsEffectInfoVersion2Supported());
  89. Assert.IsFalse(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  90. Assert.AreEqual(0.70f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  91. Assert.AreEqual(1, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  92. Assert.AreEqual(1, behaviourContext.GetPerformanceMetricsDataFormat());
  93. }
  94. [Test]
  95. public void TestRevision4()
  96. {
  97. BehaviourContext behaviourContext = new BehaviourContext();
  98. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision4);
  99. Assert.IsTrue(behaviourContext.IsAdpcmLoopContextBugFixed());
  100. Assert.IsTrue(behaviourContext.IsSplitterSupported());
  101. Assert.IsTrue(behaviourContext.IsLongSizePreDelaySupported());
  102. Assert.IsTrue(behaviourContext.IsAudioUsbDeviceOutputSupported());
  103. Assert.IsFalse(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  104. Assert.IsFalse(behaviourContext.IsSplitterBugFixed());
  105. Assert.IsFalse(behaviourContext.IsElapsedFrameCountSupported());
  106. Assert.IsFalse(behaviourContext.IsDecodingBehaviourFlagSupported());
  107. Assert.IsFalse(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  108. Assert.IsFalse(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  109. Assert.IsFalse(behaviourContext.IsWaveBufferVersion2Supported());
  110. Assert.IsFalse(behaviourContext.IsEffectInfoVersion2Supported());
  111. Assert.IsFalse(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  112. Assert.AreEqual(0.75f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  113. Assert.AreEqual(1, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  114. Assert.AreEqual(1, behaviourContext.GetPerformanceMetricsDataFormat());
  115. }
  116. [Test]
  117. public void TestRevision5()
  118. {
  119. BehaviourContext behaviourContext = new BehaviourContext();
  120. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision5);
  121. Assert.IsTrue(behaviourContext.IsAdpcmLoopContextBugFixed());
  122. Assert.IsTrue(behaviourContext.IsSplitterSupported());
  123. Assert.IsTrue(behaviourContext.IsLongSizePreDelaySupported());
  124. Assert.IsTrue(behaviourContext.IsAudioUsbDeviceOutputSupported());
  125. Assert.IsTrue(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  126. Assert.IsTrue(behaviourContext.IsSplitterBugFixed());
  127. Assert.IsTrue(behaviourContext.IsElapsedFrameCountSupported());
  128. Assert.IsTrue(behaviourContext.IsDecodingBehaviourFlagSupported());
  129. Assert.IsFalse(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  130. Assert.IsFalse(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  131. Assert.IsFalse(behaviourContext.IsWaveBufferVersion2Supported());
  132. Assert.IsFalse(behaviourContext.IsEffectInfoVersion2Supported());
  133. Assert.IsFalse(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  134. Assert.AreEqual(0.80f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  135. Assert.AreEqual(2, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  136. Assert.AreEqual(2, behaviourContext.GetPerformanceMetricsDataFormat());
  137. }
  138. [Test]
  139. public void TestRevision6()
  140. {
  141. BehaviourContext behaviourContext = new BehaviourContext();
  142. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision6);
  143. Assert.IsTrue(behaviourContext.IsAdpcmLoopContextBugFixed());
  144. Assert.IsTrue(behaviourContext.IsSplitterSupported());
  145. Assert.IsTrue(behaviourContext.IsLongSizePreDelaySupported());
  146. Assert.IsTrue(behaviourContext.IsAudioUsbDeviceOutputSupported());
  147. Assert.IsTrue(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  148. Assert.IsTrue(behaviourContext.IsSplitterBugFixed());
  149. Assert.IsTrue(behaviourContext.IsElapsedFrameCountSupported());
  150. Assert.IsTrue(behaviourContext.IsDecodingBehaviourFlagSupported());
  151. Assert.IsTrue(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  152. Assert.IsFalse(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  153. Assert.IsFalse(behaviourContext.IsWaveBufferVersion2Supported());
  154. Assert.IsFalse(behaviourContext.IsEffectInfoVersion2Supported());
  155. Assert.IsFalse(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  156. Assert.AreEqual(0.80f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  157. Assert.AreEqual(2, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  158. Assert.AreEqual(2, behaviourContext.GetPerformanceMetricsDataFormat());
  159. }
  160. [Test]
  161. public void TestRevision7()
  162. {
  163. BehaviourContext behaviourContext = new BehaviourContext();
  164. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision7);
  165. Assert.IsTrue(behaviourContext.IsAdpcmLoopContextBugFixed());
  166. Assert.IsTrue(behaviourContext.IsSplitterSupported());
  167. Assert.IsTrue(behaviourContext.IsLongSizePreDelaySupported());
  168. Assert.IsTrue(behaviourContext.IsAudioUsbDeviceOutputSupported());
  169. Assert.IsTrue(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  170. Assert.IsTrue(behaviourContext.IsSplitterBugFixed());
  171. Assert.IsTrue(behaviourContext.IsElapsedFrameCountSupported());
  172. Assert.IsTrue(behaviourContext.IsDecodingBehaviourFlagSupported());
  173. Assert.IsTrue(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  174. Assert.IsTrue(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  175. Assert.IsFalse(behaviourContext.IsWaveBufferVersion2Supported());
  176. Assert.IsFalse(behaviourContext.IsEffectInfoVersion2Supported());
  177. Assert.IsFalse(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  178. Assert.AreEqual(0.80f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  179. Assert.AreEqual(2, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  180. Assert.AreEqual(2, behaviourContext.GetPerformanceMetricsDataFormat());
  181. }
  182. [Test]
  183. public void TestRevision8()
  184. {
  185. BehaviourContext behaviourContext = new BehaviourContext();
  186. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision8);
  187. Assert.IsTrue(behaviourContext.IsAdpcmLoopContextBugFixed());
  188. Assert.IsTrue(behaviourContext.IsSplitterSupported());
  189. Assert.IsTrue(behaviourContext.IsLongSizePreDelaySupported());
  190. Assert.IsTrue(behaviourContext.IsAudioUsbDeviceOutputSupported());
  191. Assert.IsTrue(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  192. Assert.IsTrue(behaviourContext.IsSplitterBugFixed());
  193. Assert.IsTrue(behaviourContext.IsElapsedFrameCountSupported());
  194. Assert.IsTrue(behaviourContext.IsDecodingBehaviourFlagSupported());
  195. Assert.IsTrue(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  196. Assert.IsTrue(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  197. Assert.IsTrue(behaviourContext.IsWaveBufferVersion2Supported());
  198. Assert.IsFalse(behaviourContext.IsEffectInfoVersion2Supported());
  199. Assert.IsFalse(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  200. Assert.AreEqual(0.80f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  201. Assert.AreEqual(3, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  202. Assert.AreEqual(2, behaviourContext.GetPerformanceMetricsDataFormat());
  203. }
  204. [Test]
  205. public void TestRevision9()
  206. {
  207. BehaviourContext behaviourContext = new BehaviourContext();
  208. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision9);
  209. Assert.IsTrue(behaviourContext.IsAdpcmLoopContextBugFixed());
  210. Assert.IsTrue(behaviourContext.IsSplitterSupported());
  211. Assert.IsTrue(behaviourContext.IsLongSizePreDelaySupported());
  212. Assert.IsTrue(behaviourContext.IsAudioUsbDeviceOutputSupported());
  213. Assert.IsTrue(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  214. Assert.IsTrue(behaviourContext.IsSplitterBugFixed());
  215. Assert.IsTrue(behaviourContext.IsElapsedFrameCountSupported());
  216. Assert.IsTrue(behaviourContext.IsDecodingBehaviourFlagSupported());
  217. Assert.IsTrue(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  218. Assert.IsTrue(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  219. Assert.IsTrue(behaviourContext.IsWaveBufferVersion2Supported());
  220. Assert.IsTrue(behaviourContext.IsEffectInfoVersion2Supported());
  221. Assert.IsFalse(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  222. Assert.AreEqual(0.80f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  223. Assert.AreEqual(3, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  224. Assert.AreEqual(2, behaviourContext.GetPerformanceMetricsDataFormat());
  225. }
  226. [Test]
  227. public void TestRevision10()
  228. {
  229. BehaviourContext behaviourContext = new BehaviourContext();
  230. behaviourContext.SetUserRevision(BehaviourContext.BaseRevisionMagic + BehaviourContext.Revision10);
  231. Assert.IsTrue(behaviourContext.IsAdpcmLoopContextBugFixed());
  232. Assert.IsTrue(behaviourContext.IsSplitterSupported());
  233. Assert.IsTrue(behaviourContext.IsLongSizePreDelaySupported());
  234. Assert.IsTrue(behaviourContext.IsAudioUsbDeviceOutputSupported());
  235. Assert.IsTrue(behaviourContext.IsFlushVoiceWaveBuffersSupported());
  236. Assert.IsTrue(behaviourContext.IsSplitterBugFixed());
  237. Assert.IsTrue(behaviourContext.IsElapsedFrameCountSupported());
  238. Assert.IsTrue(behaviourContext.IsDecodingBehaviourFlagSupported());
  239. Assert.IsTrue(behaviourContext.IsBiquadFilterEffectStateClearBugFixed());
  240. Assert.IsTrue(behaviourContext.IsMixInParameterDirtyOnlyUpdateSupported());
  241. Assert.IsTrue(behaviourContext.IsWaveBufferVersion2Supported());
  242. Assert.IsTrue(behaviourContext.IsEffectInfoVersion2Supported());
  243. Assert.IsTrue(behaviourContext.IsBiquadFilterGroupedOptimizationSupported());
  244. Assert.AreEqual(0.80f, behaviourContext.GetAudioRendererProcessingTimeLimit());
  245. Assert.AreEqual(4, behaviourContext.GetCommandProcessingTimeEstimatorVersion());
  246. Assert.AreEqual(2, behaviourContext.GetPerformanceMetricsDataFormat());
  247. }
  248. }
  249. }