public static String RandomDecimalString(RandomGenerator r) {
   int count = r.UniformInt(40) + 1;
   StringBuilder sb = new StringBuilder();
   if (r.UniformInt(2) == 0) {
     sb.append('-');
   }
   for (int i = 0; i < count; ++i) {
     if (i == 0 && count > 1) {
       sb.append((char) ('1' + r.UniformInt(9)));
     } else {
       sb.append((char) ('0' + r.UniformInt(10)));
     }
   }
   if (r.UniformInt(2) == 0) {
     sb.append('.');
     count = r.UniformInt(30) + 1;
     for (int i = 0; i < count; ++i) {
       sb.append((char) ('0' + r.UniformInt(10)));
     }
   }
   if (r.UniformInt(2) == 0) {
     sb.append('E');
     count = (r.UniformInt(100) < 10) ? r.UniformInt(5000) : r.UniformInt(20);
     if (count != 0) {
       sb.append(r.UniformInt(2) == 0 ? '+' : '-');
     }
     sb.append(TestCommon.IntToString(count));
   }
   return sb.toString();
 }
 public static EInteger RandomSmallIntegral(RandomGenerator r) {
   int count = r.UniformInt(20) + 1;
   StringBuilder sb = new StringBuilder();
   if (r.UniformInt(2) == 0) {
     sb.append('-');
   }
   for (int i = 0; i < count; ++i) {
     if (i == 0) {
       sb.append((char) ('1' + r.UniformInt(9)));
     } else {
       sb.append((char) ('0' + r.UniformInt(10)));
     }
   }
   return EInteger.FromString(sb.toString());
 }
 public static String RandomBigIntString(RandomGenerator r) {
   int count = r.UniformInt(400) + 1;
   StringBuilder sb = new StringBuilder();
   if (r.UniformInt(2) == 0) {
     sb.append('-');
   }
   for (int i = 0; i < count; ++i) {
     if (i == 0) {
       sb.append((char) ('1' + r.UniformInt(9)));
     } else {
       sb.append((char) ('0' + r.UniformInt(10)));
     }
   }
   return sb.toString();
 }
 public static String RandomTextString(RandomGenerator rand) {
   int length = rand.UniformInt(0x2000);
   StringBuilder sb = new StringBuilder();
   for (int i = 0; i < length; ++i) {
     int x = rand.UniformInt(100);
     if (x < 95) {
       // ASCII
       sb.append((char) (0x20 + rand.UniformInt(0x60)));
     } else if (x < 98) {
       // Supplementary character
       x = rand.UniformInt(0x400) + 0xd800;
       sb.append((char) x);
       x = rand.UniformInt(0x400) + 0xdc00;
       sb.append((char) x);
     } else {
       // BMP character
       x = 0x20 + rand.UniformInt(0xffe0);
       if (x >= 0xd800 && x < 0xe000) {
         // surrogate code unit, generate ASCII instead
         x = 0x20 + rand.UniformInt(0x60);
       }
       sb.append((char) x);
     }
   }
   return sb.toString();
 }