Guest User

Souce Pawn: New String Stocks - Test

a guest
Apr 7th, 2020
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.00 KB | None | 0 0
  1. #include <sourcemod>
  2.  
  3. #pragma semicolon 1
  4. #pragma newdecls required
  5.  
  6. public Plugin myinfo =  {
  7.     name = "String Functions Test",
  8.     author = "milutinke",
  9.     description = "String Functions Test",
  10.     version = "1.0.0",
  11.     url = ""
  12. };
  13.  
  14. public void OnPluginStart() {
  15.     PrintToServer("=====================================================");
  16.     Test("IsStringNumber", "1", _, true, _);
  17.     Test("IsStringNumber", "a", _, true, _);
  18.     Test("IsStringNumber", "1234b211211", _, true, _);
  19.     Test("IsStringNumber", "23232a", _, true, _);
  20.     Test("IsStringNumber", "-7153512719111222352", _, true, _);
  21.     Test("IsStringNumber", "-3", _, true, _);
  22.     Test("IsStringNumber", "3.14", _, true, _);
  23.     Test("IsStringNumber", "som3wo4d", _, true, _);
  24.     PrintToServer("=====================================================");
  25.     Test("IsStringFloat", "1", _, true, _);
  26.     Test("IsStringFloat", "a", _, true, _);
  27.     Test("IsStringFloat", "134335.2345673", _, true, _);
  28.     Test("IsStringFloat", "23232a", _, true, _);
  29.     Test("IsStringFloat", "-7153512719111222352.6", _, true, _);
  30.     Test("IsStringFloat", "-3", _, true, _);
  31.     Test("IsStringFloat", "3.14", _, true, _);
  32.     Test("IsStringFloat", "s.om.3wo4.d", _, true, _);
  33.     Test("IsStringFloat", "0.5", _, true, _);
  34.     PrintToServer("=====================================================");
  35.     Test("IndexOfChar", "abcdefabcdef", 'f', 5, _);
  36.     Test("IndexOfChar", "abcdefabcdef", 'f', 11, _);
  37.     Test("IndexOfChar", "abcdefghijklmnopqurstuvxyz", 'z', 25, _);
  38.     Test("IndexOfChar", "abcdefgahijaklmnopaqurstauvxyza", 'a', 0, _);
  39.     PrintToServer("=====================================================");
  40.     Test("LastIndexOfChar", "abcdefabcdef", 'f', 11, _);
  41.     Test("LastIndexOfChar", "abcdefabcdef", 'f', 5, _);
  42.     Test("LastIndexOfChar", "azbcdefgzhijklmnopqurstuvxyz", 'z', 27, _);
  43.     Test("LastIndexOfChar", "abcdefgahijaklmnopaqurstauvxyza", 'a', 30, _);
  44.     PrintToServer("=====================================================");
  45.     Test("StringToLowerCase", "AbbAAAAAbAAAAAAbbbbAAA", _, _, "abbaaaaabaaaaaabbbbaaa");
  46.     PrintToServer("=====================================================");
  47.     Test("StringToUpperCase", "aBBaaaaaBaaaaaaBBBBaaa", _, _, "ABBAAAAABAAAAAABBBBAAA");
  48.     PrintToServer("=====================================================");
  49. }
  50.  
  51. public void OnPluginEnd() {
  52.    
  53. }
  54.  
  55. stock void Test(const char[] szTestName, char[] szInput, char cInput = 'a', const any aExpectedValue = 0, const char[] szExpectedValue = "") {
  56.     if(StrEqual(szTestName, "IsStringNumber")) {
  57.         PrintToServer("Test %s > Input value: %s - %s", szTestName, szInput, IsStringNumber(szInput) == aExpectedValue ? "PASSED" : "FAILED");
  58.     }
  59.    
  60.     if(StrEqual(szTestName, "IsStringFloat")) {
  61.         PrintToServer("Test %s > Input value: %s - %s", szTestName, szInput, IsStringFloat(szInput) == aExpectedValue ? "PASSED" : "FAILED");
  62.     }
  63.    
  64.     if(StrEqual(szTestName, "IndexOfChar")) {
  65.         PrintToServer("Test %s > Input value: %s - %c (Input Position: %d) - %s", szTestName, szInput, cInput, aExpectedValue, IndexOfChar(szInput, cInput) == aExpectedValue ? "PASSED" : "FAILED");
  66.     }
  67.    
  68.     if(StrEqual(szTestName, "LastIndexOfChar")) {
  69.         PrintToServer("Test %s > Input value: %s - %c (Input Position: %d) - %s", szTestName, szInput, cInput, aExpectedValue, LastIndexOfChar(szInput, cInput) == aExpectedValue ? "PASSED" : "FAILED");
  70.     }
  71.    
  72.     if(StrEqual(szTestName, "StringToLowerCase")) {
  73.         char[] szTemporary = new char[strlen(szInput) + 1];
  74.         strcopy(szTemporary, strlen(szInput) + 1, szInput);
  75.         StringToLowerCase(szTemporary);
  76.         PrintToServer("Test %s > Input value: %s - Output Value: %s - %s", szTestName, szInput, szTemporary, StrEqual(szTemporary, szExpectedValue) ? "PASSED" : "FAILED");
  77.     }
  78.    
  79.     if(StrEqual(szTestName, "StringToUpperCase")) {
  80.         char[] szTemporary = new char[strlen(szInput) + 1];
  81.         strcopy(szTemporary, strlen(szInput) + 1, szInput);
  82.         StringToUpperCase(szTemporary);
  83.         PrintToServer("Test %s > Input value: %s - Output Value: %s - %s", szTestName, szInput, szTemporary, StrEqual(szTemporary, szExpectedValue) ? "PASSED" : "FAILED");
  84.     }
  85. }
  86.  
  87. /**
  88.  * Checks if the given string is an integer (Supports negative values)
  89.  *
  90.  * @param szString     Input string
  91.  * @return             Boolean
  92.  */
  93. stock bool IsStringNumber(const char[] szString) {
  94.     int iIterator = 0;
  95.     int iLength = strlen(szString);
  96.    
  97.     char[] szTemporary = new char[iLength + 1];
  98.     strcopy(szTemporary, iLength + 1, szString);
  99.    
  100.     TrimString(szTemporary);
  101.    
  102.     if (szTemporary[0] == '-' && iLength > 1)
  103.         ++iIterator;
  104.    
  105.     while (szTemporary[iIterator] && IsCharNumeric(szTemporary[iIterator]))
  106.         ++iIterator;
  107.    
  108.     return szTemporary[iIterator] == 0 && iIterator != 0;
  109. }
  110.  
  111. /**
  112.  * Converts the given string to lower case
  113.  *
  114.  * @param szString     Input string for conversion and also the output
  115.  * @return             void
  116.  */
  117. stock void StringToLowerCase(char[] szInput) {
  118.     int iIterator = 0;
  119.     int iLength = strlen(szInput);
  120.     char[] szOutput = new char[iLength + 1];
  121.    
  122.     while (szInput[iIterator] != EOS) {
  123.         if (!IsCharLower(szInput[iIterator]))szOutput[iIterator] = CharToLower(szInput[iIterator]);
  124.         else szOutput[iIterator] = szInput[iIterator];
  125.        
  126.         iIterator++;
  127.     }
  128.    
  129.     szOutput[iIterator + 1] = EOS;
  130.     strcopy(szInput, iLength + 1, szOutput);
  131. }
  132.  
  133. /**
  134.  * Converts the given string to upper case
  135.  *
  136.  * @param szString     Input string for conversion and also the output
  137.  * @return             void
  138.  */
  139. stock void StringToUpperCase(char[] szInput) {
  140.     int iIterator = 0;
  141.     int iLength = strlen(szInput);
  142.     char[] szOutput = new char[iLength + 1];
  143.    
  144.     while (szInput[iIterator] != EOS) {
  145.         if (!IsCharUpper(szInput[iIterator]))szOutput[iIterator] = CharToUpper(szInput[iIterator]);
  146.         else szOutput[iIterator] = szInput[iIterator];
  147.        
  148.         iIterator++;
  149.     }
  150.    
  151.     szOutput[iIterator + 1] = EOS;
  152.     strcopy(szInput, iLength + 1, szOutput);
  153. }
  154.  
  155. /**
  156.  * Checks if the given string is a float (Supports negative values)
  157.  *
  158.  * @param szString     Input string
  159.  * @return             Boolean
  160.  */
  161. stock bool IsStringFloat(const char[] szString) {
  162.     char cCharacter;
  163.     int iIterator;
  164.     int iP;
  165.     int iLength = strlen(szString);
  166.    
  167.     while (0 < szString[iIterator] <= 255) {
  168.         if (szString[0] == '-' && iLength > 1) {
  169.             iIterator++;
  170.             continue;
  171.         }
  172.        
  173.         cCharacter = szString[iIterator];
  174.        
  175.         if (!IsCharNumeric(cCharacter)) {
  176.             if (cCharacter != '.' || iP)
  177.                 return false;
  178.            
  179.             iP = 1;
  180.         }
  181.        
  182.         iIterator++;
  183.     }
  184.    
  185.     return (iIterator > 2);
  186. }
  187.  
  188. /**
  189.  * Finds the position (index) of character in the given string
  190.  *
  191.  * @param szString     Input string
  192.  * @param szString     Input character
  193.  * @param szString     Do we need the last index (Optional, default: false)
  194.  * @return             Integer, index of the found character (returns -1 if the character was not found)
  195.  */
  196. stock int IndexOfChar(const char[] szText, const char cCharacter, bool bLast = false) {
  197.     int iTextLength = strlen(szText);
  198.     int iCharacter, iLastIndex = -1;
  199.    
  200.     for (iCharacter = 0; iCharacter < iTextLength; iCharacter++) {
  201.         if (szText[iCharacter] == cCharacter) {
  202.             iLastIndex = iCharacter;
  203.            
  204.             if (!bLast)
  205.                 break;
  206.         }
  207.     }
  208.    
  209.     return iLastIndex;
  210. }
  211.  
  212. /**
  213.  * Finds the last position (index) of character in the given string
  214.  *
  215.  * @param szString     Input string
  216.  * @param szString     Input character
  217.  * @return             Integer, index of the found character. (returns -1 if the character was not found)
  218.  */
  219. stock int LastIndexOfChar(const char[] szText, const char cCharacter) {
  220.     return IndexOfChar(szText, cCharacter, true);
  221. }
Advertisement
Add Comment
Please, Sign In to add comment