testgen.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <stdint.h>
  5. #include <time.h>
  6. int decimal_to_binary(char* p, int32_t n)
  7. {
  8. int32_t c, d, t;
  9. t = 0;
  10. if (p == NULL)
  11. exit(EXIT_FAILURE);
  12. for (c = 31 ; c >= 0 ; c--)
  13. {
  14. d = n >> c;
  15. if (d & 1)
  16. *(p+t) = 1 + '0';
  17. else
  18. *(p+t) = 0 + '0';
  19. t++;
  20. }
  21. *(p+t) = '\n';
  22. *(p+t+1) = '\0';
  23. return 0;
  24. }
  25. int unsigned_decimal_to_binary(char* p, uint32_t n)
  26. {
  27. int c;
  28. uint32_t d, t;
  29. t = 0;
  30. if (p == NULL)
  31. exit(EXIT_FAILURE);
  32. for (c = 31 ; c >= 0 ; c--)
  33. {
  34. d = n >> c;
  35. if (d & 1)
  36. *(p+t) = 1 + '0';
  37. else
  38. *(p+t) = 0 + '0';
  39. t++;
  40. }
  41. *(p+t) = '\n';
  42. *(p+t+1) = '\0';
  43. return 0;
  44. }
  45. int main (int argc, char ** argv) {
  46. int i;
  47. int32_t r, s;
  48. uint32_t ur, us;
  49. FILE* output;
  50. FILE* input;
  51. char str[40];
  52. output = fopen("./testdata/output.txt", "w");
  53. input = fopen("./testdata/input.txt", "w");
  54. srand(time(NULL));
  55. for (i = 0; i < 5; i++) {
  56. r = ((int32_t) rand()+rand());
  57. s = ((int32_t) rand()+rand());
  58. fputs("ALU_NOP\n", input);
  59. decimal_to_binary(str, r);
  60. fputs(str, input);
  61. decimal_to_binary(str, s);
  62. fputs(str, input);
  63. fputs("\n", input);
  64. decimal_to_binary(str, s);
  65. fputs(str, output);
  66. fputs("-\n\n", output);
  67. }
  68. for (i = 0; i < 5; i++) {
  69. r = ((int32_t) rand()+rand());
  70. s = ((int32_t) rand()+rand());
  71. fputs("ALU_SLT\n", input);
  72. decimal_to_binary(str, r);
  73. fputs(str, input);
  74. decimal_to_binary(str, s);
  75. fputs(str, input);
  76. fputs("\n", input);
  77. if (r < s)
  78. fputs("00000000000000000000000000000001\n", output);
  79. else
  80. fputs("00000000000000000000000000000000\n", output);
  81. if (r < s)
  82. fputs("0\n\n", output);
  83. else
  84. fputs("1\n\n", output);
  85. }
  86. for (i = 0; i < 50; i++) {
  87. ur = (uint32_t) ((int32_t) rand()+rand());
  88. us = (uint32_t) ((int32_t) rand()+rand());
  89. fputs("ALU_SLTU\n", input);
  90. unsigned_decimal_to_binary(str, ur);
  91. fputs(str, input);
  92. unsigned_decimal_to_binary(str, us);
  93. fputs(str, input);
  94. fputs("\n", input);
  95. if (ur < us)
  96. fputs("00000000000000000000000000000001\n", output);
  97. else
  98. fputs("00000000000000000000000000000000\n", output);
  99. if (ur < us)
  100. fputs("0\n\n", output);
  101. else
  102. fputs("1\n\n", output);
  103. }
  104. for (i = 0; i < 50; i++) {
  105. ur = (uint32_t) ((int32_t) rand()+rand());
  106. us = (uint32_t) ((int32_t) rand()+rand());
  107. fputs("ALU_SLL\n", input);
  108. unsigned_decimal_to_binary(str, ur);
  109. fputs(str, input);
  110. unsigned_decimal_to_binary(str, us);
  111. fputs(str, input);
  112. fputs("\n", input);
  113. unsigned_decimal_to_binary(str, ur << us);
  114. fputs(str, output);
  115. fputs("-\n\n", output);
  116. }
  117. for (i = 0; i < 50; i++) {
  118. ur = (uint32_t) ((int32_t) rand()+rand());
  119. us = (uint32_t) ((int32_t) rand()+rand());
  120. fputs("ALU_SRL\n", input);
  121. unsigned_decimal_to_binary(str, ur);
  122. fputs(str, input);
  123. unsigned_decimal_to_binary(str, us);
  124. fputs(str, input);
  125. fputs("\n", input);
  126. unsigned_decimal_to_binary(str, ur >> us);
  127. fputs(str, output);
  128. fputs("-\n\n", output);
  129. }
  130. for (i = 0; i < 50; i++) {
  131. r = ((int32_t) rand()+rand());
  132. us = (uint32_t) ((int32_t) rand()+rand());
  133. fputs("ALU_SRA\n", input);
  134. decimal_to_binary(str, r);
  135. fputs(str, input);
  136. unsigned_decimal_to_binary(str, us);
  137. fputs(str, input);
  138. fputs("\n", input);
  139. unsigned_decimal_to_binary(str, r >> us);
  140. fputs(str, output);
  141. fputs("-\n\n", output);
  142. }
  143. for (i = 0; i < 50; i++) {
  144. r = ((int32_t) rand()+rand());
  145. s = ((int32_t) rand()+rand());
  146. fputs("ALU_ADD\n", input);
  147. decimal_to_binary(str, r);
  148. fputs(str, input);
  149. decimal_to_binary(str, s);
  150. fputs(str, input);
  151. fputs("\n", input);
  152. decimal_to_binary(str, r + s);
  153. fputs(str, output);
  154. fputs("-\n\n", output);
  155. }
  156. for (i = 0; i < 50; i++) {
  157. r = ((int32_t) rand()+rand());
  158. s = ((int32_t) rand()+rand());
  159. fputs("ALU_SUB\n", input);
  160. decimal_to_binary(str, r);
  161. fputs(str, input);
  162. decimal_to_binary(str, s);
  163. fputs(str, input);
  164. fputs("\n", input);
  165. decimal_to_binary(str, r - s);
  166. fputs(str, output);
  167. if (r == s)
  168. fputs("1\n\n", output);
  169. else
  170. fputs("0\n\n", output);
  171. }
  172. for (i = 0; i < 50; i++) {
  173. r = ((int32_t) rand()+rand());
  174. s = ((int32_t) rand()+rand());
  175. fputs("ALU_AND\n", input);
  176. decimal_to_binary(str, r);
  177. fputs(str, input);
  178. decimal_to_binary(str, s);
  179. fputs(str, input);
  180. fputs("\n", input);
  181. decimal_to_binary(str, r & s);
  182. fputs(str, output);
  183. fputs("-\n\n", output);
  184. }
  185. for (i = 0; i < 50; i++) {
  186. r = ((int32_t) rand()+rand());
  187. s = ((int32_t) rand()+rand());
  188. fputs("ALU_OR\n", input);
  189. decimal_to_binary(str, r);
  190. fputs(str, input);
  191. decimal_to_binary(str, s);
  192. fputs(str, input);
  193. fputs("\n", input);
  194. decimal_to_binary(str, r | s);
  195. fputs(str, output);
  196. fputs("-\n\n", output);
  197. }
  198. for (i = 0; i < 50; i++) {
  199. r = ((int32_t) rand()+rand()) ;
  200. s = ((int32_t) rand()+rand()) ;
  201. fputs("ALU_XOR\n", input);
  202. decimal_to_binary(str, r);
  203. fputs(str, input);
  204. decimal_to_binary(str, s);
  205. fputs(str, input);
  206. if (i != 49) {
  207. fputs("\n", input);
  208. }
  209. decimal_to_binary(str, r ^ s);
  210. fputs(str, output);
  211. fputs("-\n", output);
  212. if (i != 49) {
  213. fputs("\n", input);
  214. }
  215. }
  216. fclose(output);
  217. fclose(input);
  218. }