WPBDC 2013.1.6 → 2013.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NzQ1ZDYzZTUzNzI0ZTkzMzU5ZWVlM2E3MDIxNDY3ZTVkYzBjMDcxYg==
4
+ MmM1MDlkNTI1YWUyOTM5OTNjYTA3YWQ5NTIzNDBkMGM0MmZiMmQyMA==
5
5
  data.tar.gz: !binary |-
6
- YTgyNTliYWJjYzQyZmQ5NWVlMTBiMTU1Yjk5N2UxYjU4MzA0ZTI1Mg==
6
+ MGJhOTAxMTNhZDkwYzk5YTAyNmViZTc1M2IxNTY5Y2VlNTRmNjQ2MQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MzljYWFjNDljZGU0YzAxNjJlNGVhN2NjOTc2MDg4MDhjYWY5NWQxYjc2ZGNi
10
- MTA0OGNkZjE2NDFkMWY5YjBjZjE4ODdiZmZjYTMzOWJkOGRkNWQzMGMyMmMz
11
- NDNkZDM2OTRiNDk1MmVmNGU1ZDQ0Y2UxZWVkNGQ2YTNlYmY0ODk=
9
+ OGEwMGMwOGIwMjQ0MGUwM2UzMjBjM2EzNGNkNzQ2ZDRmNzhhZjhmNTI4NjM3
10
+ YzNkN2I5MWM5MTk1MjE2ZTNhZDFlMTdiYWQ4OTBjMzQ1Mzc3YTdlMTUyZDQ0
11
+ ZThhMDFkNWQ5YzQyZDZkYTRiZGQ1M2RmMjg5NzYyMWVjMmE5NjA=
12
12
  data.tar.gz: !binary |-
13
- Mzc1MjQ5NGFmODQ1Zjk1YzJhMzlkNmViNDMyNTIwMzUwMmRjZDRiNzM3MmQz
14
- OTI5YmNmZWYxZjE3YTg0MjUzYmI5N2IxMjExMzU3OGE4MmEwOGM3MWI2NTU2
15
- ZDU4NGYyNzRmYjAyYzc2NjQ4YjVlZDFkMDhhNjMwM2I5ZmYxNzY=
13
+ MDVmNTZhZjE5YWYzOTIxYWI3NWY5N2M3MjUzZWJmYzYzMTQzZjRhNzgyYmQ3
14
+ MWYwMGY3YWM3MDc3NDZhYzM5ZmM4YWRjMzI3YzllOGM5YjIzNTg3MDliNjcw
15
+ MjY5ZGM0OTlkYWYwNjRiMWE1YzVjMTUxMDI5MWMwYjQ1NDIwOGI=
data/ext/WPBDC/judge.c CHANGED
@@ -206,16 +206,52 @@ char *analysis_table(STRING *bridge_as_string)
206
206
  //#define WRITE_EXAMPLES
207
207
 
208
208
  #ifdef WRITE_EXAMPLES
209
- #define EG_DIR "../Eg/2011"
210
- #define NEW_EG_DIR "../Eg/2012"
209
+ #define EG_DIR "../../test/eg/2012"
210
+ #define NEW_EG_DIR "../../test/eg/2013"
211
211
  #else
212
- #define EG_DIR "../Eg/2012"
212
+ #define EG_DIR "../../test/eg/2012"
213
213
  #endif
214
214
 
215
- #include <io.h>
215
+ #ifdef WINDOWS
216
216
  #include <crtdbg.h>
217
+ #endif
218
+
217
219
  #include <sys/types.h>
218
220
  #include <sys/stat.h>
221
+ #include <dirent.h>
222
+
223
+ void strcpyn(char *dst, char *src, int n)
224
+ {
225
+ while (n-- > 0 && *src)
226
+ *dst++ = *src++;
227
+ *dst = '\0';
228
+ }
229
+
230
+ void split_path(char *path, char *drv, char *dir, char *fname, char *ext)
231
+ {
232
+ int len = strlen(path);
233
+ char *colon, *slash, *dot;
234
+
235
+ colon = strchr(path, ':');
236
+ if (colon) {
237
+ if (drv) strcpyn(drv, path, colon - path + 1);
238
+ path = colon + 1;
239
+ }
240
+ slash = strrchr(path, '/');
241
+ if (slash) {
242
+ if (dir) strcpyn(dir, path, slash - path + 1);
243
+ path = slash + 1;
244
+ }
245
+ dot = strrchr(path, '.');
246
+ if (dot) {
247
+ if (ext) strcpy(ext, dot);
248
+ if (fname) strcpyn(fname, path, dot - path);
249
+ }
250
+ else {
251
+ if (ext) strcpy(ext, "");
252
+ if (fname) strcpy(fname, path);
253
+ }
254
+ }
219
255
 
220
256
  void split_fn(char *fn, char *path, char *name, char *ext)
221
257
  {
@@ -250,6 +286,7 @@ int main(int argc, char* argv[])
250
286
  {
251
287
  extern unsigned contest_year; // ugly hack go read other years' bridge files
252
288
 
289
+ DIR *d;
253
290
  FILE *f;
254
291
  char fname[256];
255
292
  char raw[4*1024];
@@ -259,6 +296,7 @@ int main(int argc, char* argv[])
259
296
  char buf[256], path[256], name[256], ext[256];
260
297
  char *text;
261
298
  struct analysis_result_t result[1];
299
+ struct dirent *dir_ent;
262
300
 
263
301
  TBridge bridge[1];
264
302
  TBridge copy[1];
@@ -268,7 +306,6 @@ int main(int argc, char* argv[])
268
306
  TAnalysis anal[1];
269
307
  int i, n, test_case;
270
308
  long h;
271
- struct _finddata_t file_data[1];
272
309
  COMPRESSED_IMAGE compressed_image[1];
273
310
 
274
311
  #ifdef WRITE_EXAMPLES
@@ -288,6 +325,12 @@ int main(int argc, char* argv[])
288
325
  }
289
326
  #endif
290
327
 
328
+ d = opendir (EG_DIR "/");
329
+ if (!d) {
330
+ perror ("Couldn't open test input directory " EG_DIR);
331
+ return 17;
332
+ }
333
+
291
334
  init_bridge(bridge);
292
335
  init_bridge(copy);
293
336
  init_geometry(geometry);
@@ -302,26 +345,21 @@ int main(int argc, char* argv[])
302
345
  return 1;
303
346
 
304
347
  for (test_case = 1;;test_case++) {
305
-
306
- if (test_case == 1) {
307
- h = _findfirst( EG_DIR "/*.bdc", file_data );
308
- if (h == -1) {
309
- printf( "No bridge files!\n" );
310
- return 17;
311
- }
312
- }
313
- else {
314
- if (_findnext(h, file_data) != 0) {
315
- _findclose(h);
316
- test_case--;
317
- break;
318
- }
348
+ dir_ent = readdir(d);
349
+ if (!dir_ent) {
350
+ closedir(d);
351
+ test_case--;
352
+ break;
319
353
  }
320
- if (strcmp(file_data->name, "A-arch-10-4-1.bdc") != 0)
354
+ if (strstr(dir_ent->d_name, ".bdc") == NULL)
355
+ continue;
356
+
357
+ // SINGLE TEST CASE!
358
+ if (strcmp(dir_ent->d_name, "semis-01.bdc") != 0)
321
359
  continue;
322
360
 
323
- printf("Test case %d (%s):\n", test_case, file_data->name);
324
- sprintf(fname, EG_DIR "/%s", file_data->name);
361
+ printf("Test case %d (%s):\n", test_case, dir_ent->d_name);
362
+ sprintf(fname, EG_DIR "/%s", dir_ent->d_name);
325
363
  f = fopen(fname, "rb");
326
364
  if (!f) {
327
365
  printf("can't open bridge file\n");
@@ -361,13 +399,13 @@ int main(int argc, char* argv[])
361
399
 
362
400
  #ifdef WRITE_EXAMPLES
363
401
 
364
- if (!strstr(file_data->name, "failed")) {
402
+ if (!strstr(dir_ent->d_name, "failed")) {
365
403
 
366
404
  struct _stat stat_buf[1];
367
405
 
368
406
  n_examples_read++;
369
407
 
370
- split_fn(file_data->name, path, name, ext);
408
+ split_fn(dir_ent->d_name, path, name, ext);
371
409
 
372
410
  n = fix_failure(copy, bridge, params);
373
411
 
@@ -509,7 +547,7 @@ int main(int argc, char* argv[])
509
547
 
510
548
  if (text) {
511
549
  printf("writing analysis...");
512
- _splitpath(file_data->name, 0, path, name, ext);
550
+ split_path(dir_ent->d_name, 0, path, name, ext);
513
551
  sprintf(buf, "Debug/html/%s.htm", name);
514
552
  f = fopen(buf, "w");
515
553
  if (!f) {
@@ -540,7 +578,7 @@ int main(int argc, char* argv[])
540
578
 
541
579
  // Do a sketch
542
580
  sketch(bridge_str, 300, 300, compressed_image, result);
543
- _splitpath(file_data->name, 0, path, name, ext);
581
+ split_path(dir_ent->d_name, 0, path, name, ext);
544
582
  sprintf(buf, "Debug/sketch/%s.png", name);
545
583
  f = fopen(buf, "wb");
546
584
  if (!f) {
data/ext/WPBDC/judge.h CHANGED
@@ -17,7 +17,10 @@
17
17
 
18
18
  // The id for the semifinal scenario including a null value
19
19
  #define NULL_SEMIFINAL_SCENARIO_ID "0000000000"
20
- #define SEMIFINAL_SCENARIO_ID NULL_SEMIFINAL_SCENARIO_ID
20
+
21
+ // When you set this, you _must_ change the scenario table so its record is in sorted order!
22
+ #define SEMIFINAL_SCENARIO_ID "3100003100"
23
+ //#define SEMIFINAL_SCENARIO_ID NULL_SEMIFINAL_SCENARIO_ID
21
24
 
22
25
  // Status returns from analyze().
23
26
  #define BRIDGE_OK 0
data/ext/WPBDC/rubydefs.h CHANGED
@@ -1,7 +1,7 @@
1
1
  #ifndef _RUBYDEFS_H
2
2
  #define _RUBYDEFS_H
3
3
 
4
- #if !defined(STAND_ALONE)
4
+ #if !defined(NATIVE_TEST)
5
5
 
6
6
  #include <ruby.h>
7
7
 
@@ -41,6 +41,8 @@
41
41
 
42
42
  #else
43
43
 
44
+ #include <stdio.h>
45
+
44
46
  #define New(x,v,n,t) \
45
47
  do { \
46
48
  if ( !(v = (t*)malloc((n)*sizeof(t))) ) { \
data/ext/WPBDC/scenario.c CHANGED
@@ -10,7 +10,6 @@
10
10
  // Lookup table is sorted on 10-char ID field for binary search.
11
11
  // The search routine will bubble the semifinal row to the right location.
12
12
  static TScenarioDescriptor scenario_descriptor_tbl[] = {
13
- { 999, SEMIFINAL_SCENARIO_ID, "99Z", 100000.00 },
14
13
  { 0, "1050824100", "27A", 99874.40 },
15
14
  { 1, "1051220100", "32A", 105140.00 },
16
15
  { 2, "1051616100", "36A", 111994.40 },
@@ -272,6 +271,7 @@ static TScenarioDescriptor scenario_descriptor_tbl[] = {
272
271
  { 258, "3091616300", "17C", 108700.00 },
273
272
  { 259, "3091616350", "84C", 112200.00 },
274
273
  { 260, "3091616351", "88C", 120200.00 },
274
+ { 999, SEMIFINAL_SCENARIO_ID, "99Z", 100000.00 },
275
275
  { 261, "3100804100", "22C", 88840.40 },
276
276
  { 262, "3101204060", "54C", 94500.00 },
277
277
  { 263, "3101204360", "82C", 106500.00 },
@@ -434,6 +434,8 @@ int lookup_scenario_descriptor(TScenarioDescriptor *desc, char *id)
434
434
  int hi = STATIC_ARRAY_SIZE(scenario_descriptor_tbl) - 1;
435
435
  int i, cmp, mid;
436
436
 
437
+ /* NOT THREAD SAFE. DO BY HAND!
438
+
437
439
  // Bubble the semifinal scenario to the right position one time.
438
440
  if (!initialized_p) {
439
441
  initialized_p = 1;
@@ -446,11 +448,16 @@ int lookup_scenario_descriptor(TScenarioDescriptor *desc, char *id)
446
448
  }
447
449
  scenario_descriptor_tbl[i] = semifinal_descriptor;
448
450
  }
451
+ */
452
+
453
+ // TODO Remove
454
+ fprintf(stderr, "looking for %.10s\n", id);
449
455
 
450
456
  // Don't bother searching for the null semifinal scenario.
451
457
  if (strncmp(id, NULL_SEMIFINAL_SCENARIO_ID, SCENARIO_ID_SIZE) != 0) {
452
458
 
453
459
  while (lo <= hi) {
460
+ fprintf(stderr, "SEARCH [%d, %d]\n", lo, hi);
454
461
  mid = (unsigned)(lo + hi) >> 1;
455
462
  cmp = strncmp(id, scenario_descriptor_tbl[mid].id, SCENARIO_ID_SIZE);
456
463
  if (cmp < 0)
@@ -658,6 +665,8 @@ int test_scenario_table(void)
658
665
  printf("scenario lookup check (find good indices): ");
659
666
  for (i = 0; i < STATIC_ARRAY_SIZE(scenario_descriptor_tbl); i++) {
660
667
  printf("%d ", i);
668
+ if (strncmp(scenario_descriptor_tbl[i].id, NULL_SEMIFINAL_SCENARIO_ID, SCENARIO_ID_SIZE) == 0)
669
+ continue;
661
670
  if (lookup_scenario_descriptor(desc, scenario_descriptor_tbl[i].id) < 0) {
662
671
  printf("\nfailed to find scenario id %s (position %d)\n",
663
672
  scenario_descriptor_tbl[i].id, i);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: WPBDC
3
3
  version: !ruby/object:Gem::Version
4
- version: 2013.1.6
4
+ version: 2013.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gene Ressler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-16 00:00:00.000000000 Z
11
+ date: 2013-07-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Container for C code extension that implements the West Point Bridge
14
14
  Contest Judge.