| Path: | tchtest.rb |
| Last Update: | Sun Sep 19 11:46:52 +0200 2010 |
print error message of hash database
# File tchtest.rb, line 58
58: def eprint(hdb, func)
59: path = hdb.path
60: STDERR.printf("%s: %s: %s: %s\n", $progname, path ? path : "-", func, hdb.errmsg)
61: end
main routine
# File tchtest.rb, line 24
24: def main
25: ARGV.length >= 1 || usage
26: if ARGV[0] == "write"
27: rv = runwrite
28: elsif ARGV[0] == "read"
29: rv = runread
30: elsif ARGV[0] == "remove"
31: rv = runremove
32: elsif ARGV[0] == "misc"
33: rv = runmisc
34: else
35: usage
36: end
37: GC.start
38: return rv
39: end
perform misc command
# File tchtest.rb, line 335
335: def procmisc(path, rnum, opts, omode)
336: printf("<Miscellaneous Test>\n path=%s rnum=%d opts=%d omode=%d\n\n",
337: path, rnum, opts, omode)
338: err = false
339: stime = Time.now
340: hdb = HDB::new
341: if !hdb.tune(rnum / 50, 2, -1, opts)
342: eprint(hdb, "tune")
343: err = true
344: end
345: if !hdb.setcache(rnum / 10)
346: eprint(hdb, "setcache")
347: err = true
348: end
349: if !hdb.setxmsiz(rnum * 4)
350: eprint(hdb, "setxmsiz")
351: err = true
352: end
353: if !hdb.setdfunit(8)
354: eprint(hdb, "setdfunit")
355: err = true
356: end
357: if !hdb.open(path, HDB::OWRITER | HDB::OCREAT | HDB::OTRUNC | omode)
358: eprint(hdb, "open")
359: err = true
360: end
361: printf("writing:\n")
362: for i in 1..rnum
363: buf = sprintf("%08d", i)
364: if !hdb.put(buf, buf)
365: eprint(hdb, "put")
366: err = true
367: break
368: end
369: if rnum > 250 && i % (rnum / 250) == 0
370: print('.')
371: if i == rnum || i % (rnum / 10) == 0
372: printf(" (%08d)\n", i)
373: end
374: end
375: end
376: printf("reading:\n")
377: for i in 1..rnum
378: buf = sprintf("%08d", i)
379: if !hdb.get(buf)
380: eprint(hdb, "get")
381: err = true
382: break
383: end
384: if rnum > 250 && i % (rnum / 250) == 0
385: print('.')
386: if i == rnum || i % (rnum / 10) == 0
387: printf(" (%08d)\n", i)
388: end
389: end
390: end
391: printf("removing:\n")
392: for i in 1..rnum
393: buf = sprintf("%08d", i)
394: if rand(2) == 0 && !hdb.out(buf)
395: eprint(hdb, "out")
396: err = true
397: break
398: end
399: if rnum > 250 && i % (rnum / 250) == 0
400: print('.')
401: if i == rnum || i % (rnum / 10) == 0
402: printf(" (%08d)\n", i)
403: end
404: end
405: end
406: printf("checking iterator:\n")
407: if !hdb.iterinit
408: eprint(hdb, "iterinit")
409: err = true
410: end
411: inum = 0
412: while key = hdb.iternext
413: value = hdb.get(key)
414: if !value
415: eprint(hdb, "get")
416: err = true
417: end
418: if inum > 0 && rnum > 250 && inum % (rnum / 250) == 0
419: print('.')
420: if inum == rnum || inum % (rnum / 10) == 0
421: printf(" (%08d)\n", inum)
422: end
423: end
424: inum += 1
425: end
426: printf(" (%08d)\n", inum) if rnum > 250
427: if hdb.ecode != HDB::ENOREC || inum != hdb.rnum
428: eprint(hdb, "(validation)")
429: err = true
430: end
431: keys = hdb.fwmkeys("0", 10)
432: if hdb.rnum >= 10 && keys.size != 10
433: eprint(hdb, "fwmkeys")
434: err = true
435: end
436: printf("checking counting:\n")
437: for i in 1..rnum
438: buf = sprintf("[%d]", rand(rnum))
439: if rand(2) == 0
440: if !hdb.addint(buf, 1) && hdb.ecode != HDB::EKEEP
441: eprint(hdb, "addint")
442: err = true
443: break
444: end
445: else
446: if !hdb.adddouble(buf, 1) && hdb.ecode != HDB::EKEEP
447: eprint(hdb, "adddouble")
448: err = true
449: break
450: end
451: end
452: if i > 0 && rnum > 250 && i % (rnum / 250) == 0
453: print('.')
454: if i == rnum || i % (rnum / 10) == 0
455: printf(" (%08d)\n", i)
456: end
457: end
458: end
459: if !hdb.sync
460: eprint(hdb, "sync")
461: err = true
462: end
463: if !hdb.optimize
464: eprint(hdb, "optimize")
465: err = true
466: end
467: npath = path + "-tmp"
468: if !hdb.copy(npath)
469: eprint(hdb, "copy")
470: err = true
471: end
472: File::unlink(npath)
473: if !hdb.vanish
474: eprint(hdb, "vanish")
475: err = true
476: end
477: printf("checking transaction commit:\n")
478: if !hdb.tranbegin
479: eprint(hdb, "tranbegin")
480: err = true
481: end
482: for i in 1..rnum
483: buf = sprintf("%d", rand(rnum))
484: if rand(2) == 0
485: if !hdb.putcat(buf, buf)
486: eprint(hdb, "putcat")
487: err = true
488: break
489: end
490: else
491: if !hdb.out(buf) && hdb.ecode != HDB::ENOREC
492: eprint(hdb, "out")
493: err = true
494: break
495: end
496: end
497: if rnum > 250 && i % (rnum / 250) == 0
498: print('.')
499: if i == rnum || i % (rnum / 10) == 0
500: printf(" (%08d)\n", i)
501: end
502: end
503: end
504: if !hdb.trancommit
505: eprint(hdb, "trancommit")
506: err = true
507: end
508: printf("checking transaction abort:\n")
509: ornum = hdb.rnum
510: ofsiz = hdb.fsiz
511: if !hdb.tranbegin
512: eprint(hdb, "tranbegin")
513: err = true
514: end
515: for i in 1..rnum
516: buf = sprintf("%d", rand(rnum))
517: if rand(2) == 0
518: if !hdb.putcat(buf, buf)
519: eprint(hdb, "putcat")
520: err = true
521: break
522: end
523: else
524: if !hdb.out(buf) && hdb.ecode != HDB::ENOREC
525: eprint(hdb, "out")
526: err = true
527: break
528: end
529: end
530: if rnum > 250 && i % (rnum / 250) == 0
531: print('.')
532: if i == rnum || i % (rnum / 10) == 0
533: printf(" (%08d)\n", i)
534: end
535: end
536: end
537: if !hdb.tranabort
538: eprint(hdb, "trancommit")
539: err = true
540: end
541: if hdb.rnum != ornum || hdb.fsiz != ofsiz
542: eprint(hdb, "(validation)")
543: err = true
544: end
545: printf("checking hash-like updating:\n")
546: for i in 1..rnum
547: buf = sprintf("[%d]", rand(rnum))
548: rnd = rand(4)
549: if rnd == 0
550: hdb[buf] = buf
551: elsif rnd == 1
552: value = hdb[buf]
553: elsif rnd == 2
554: res = hdb.key?(buf)
555: elsif rnd == 3
556: hdb.delete(buf)
557: end
558: if rnum > 250 && i % (rnum / 250) == 0
559: print('.')
560: if i == rnum || i % (rnum / 10) == 0
561: printf(" (%08d)\n", i)
562: end
563: end
564: end
565: printf("checking hash-like iterator:\n")
566: inum = 0
567: hdb.each do |tkey, tvalue|
568: if inum > 0 && rnum > 250 && inum % (rnum / 250) == 0
569: print('.')
570: if inum == rnum || inum % (rnum / 10) == 0
571: printf(" (%08d)\n", inum)
572: end
573: end
574: inum += 1
575: end
576: printf(" (%08d)\n", inum) if rnum > 250
577: hdb.clear
578: printf("record number: %d\n", hdb.rnum)
579: printf("size: %d\n", hdb.fsiz)
580: if !hdb.close
581: eprint(hdb, "close")
582: err = true
583: end
584: printf("time: %.3f\n", Time.now - stime)
585: printf("%s\n\n", err ? "error" : "ok")
586: return err ? 1 : 0
587: end
perform read command
# File tchtest.rb, line 261
261: def procread(path, omode)
262: printf("<Reading Test>\n path=%s omode=%d\n\n", path, omode)
263: err = false
264: stime = Time.now
265: hdb = HDB::new
266: if !hdb.open(path, HDB::OREADER | omode)
267: eprint(hdb, "open")
268: err = true
269: end
270: rnum = hdb.rnum
271: for i in 1..rnum
272: buf = sprintf("%08d", i)
273: if !hdb.get(buf)
274: eprint(hdb, "get")
275: err = true
276: break
277: end
278: if rnum > 250 && i % (rnum / 250) == 0
279: print('.')
280: if i == rnum || i % (rnum / 10) == 0
281: printf(" (%08d)\n", i)
282: end
283: end
284: end
285: printf("record number: %d\n", hdb.rnum)
286: printf("size: %d\n", hdb.fsiz)
287: if !hdb.close
288: eprint(hdb, "close")
289: err = true
290: end
291: printf("time: %.3f\n", Time.now - stime)
292: printf("%s\n\n", err ? "error" : "ok")
293: return err ? 1 : 0
294: end
perform remove command
# File tchtest.rb, line 298
298: def procremove(path, omode)
299: printf("<Removing Test>\n path=%s omode=%d\n\n", path, omode)
300: err = false
301: stime = Time.now
302: hdb = HDB::new
303: if !hdb.open(path, HDB::OWRITER | omode)
304: eprint(hdb, "open")
305: err = true
306: end
307: rnum = hdb.rnum
308: for i in 1..rnum
309: buf = sprintf("%08d", i)
310: if !hdb.out(buf)
311: eprint(hdb, "out")
312: err = true
313: break
314: end
315: if rnum > 250 && i % (rnum / 250) == 0
316: print('.')
317: if i == rnum || i % (rnum / 10) == 0
318: printf(" (%08d)\n", i)
319: end
320: end
321: end
322: printf("record number: %d\n", hdb.rnum)
323: printf("size: %d\n", hdb.fsiz)
324: if !hdb.close
325: eprint(hdb, "close")
326: err = true
327: end
328: printf("time: %.3f\n", Time.now - stime)
329: printf("%s\n\n", err ? "error" : "ok")
330: return err ? 1 : 0
331: end
perform write command
# File tchtest.rb, line 212
212: def procwrite(path, rnum, bnum, apow, fpow, opts, omode, as)
213: printf("<Writing Test>\n path=%s rnum=%d bnum=%d apow=%d fpow=%d opts=%d" +
214: " omode=%d as=%s\n\n", path, rnum, bnum, apow, fpow, opts, omode, as)
215: err = false
216: stime = Time.now
217: hdb = HDB::new
218: if !hdb.tune(bnum, apow, fpow, opts)
219: eprint(hdb, "tune")
220: err = true
221: end
222: if !hdb.open(path, HDB::OWRITER | HDB::OCREAT | HDB::OTRUNC | omode)
223: eprint(hdb, "open")
224: err = true
225: end
226: for i in 1..rnum
227: buf = sprintf("%08d", i)
228: if as
229: if !hdb.putasync(buf, buf)
230: eprint(hdb, "putasync")
231: err = true
232: break
233: end
234: else
235: if !hdb.put(buf, buf)
236: eprint(hdb, "put")
237: err = true
238: break
239: end
240: end
241: if rnum > 250 && i % (rnum / 250) == 0
242: print('.')
243: if i == rnum || i % (rnum / 10) == 0
244: printf(" (%08d)\n", i)
245: end
246: end
247: end
248: printf("record number: %d\n", hdb.rnum)
249: printf("size: %d\n", hdb.fsiz)
250: if !hdb.close
251: eprint(hdb, "close")
252: err = true
253: end
254: printf("time: %.3f\n", Time.now - stime)
255: printf("%s\n\n", err ? "error" : "ok")
256: return err ? 1 : 0
257: end
parse arguments of misc command
# File tchtest.rb, line 173
173: def runmisc
174: path = nil
175: rnum = nil
176: opts = 0
177: omode = 0
178: i = 1
179: while i < ARGV.length
180: if !path && ARGV[i] =~ /^-/
181: if ARGV[i] == "-tl"
182: opts |= HDB::TLARGE
183: elsif ARGV[i] == "-td"
184: opts |= HDB::TDEFLATE
185: elsif ARGV[i] == "-tb"
186: opts |= HDB::TBZIP
187: elsif ARGV[i] == "-tt"
188: opts |= HDB::TTCBS
189: elsif ARGV[i] == "-nl"
190: omode |= HDB::ONOLCK
191: elsif ARGV[i] == "-nb"
192: omode |= HDB::OLCKNB
193: else
194: usage
195: end
196: elsif !path
197: path = ARGV[i]
198: elsif !rnum
199: rnum = ARGV[i].to_i
200: else
201: usage
202: end
203: i += 1
204: end
205: usage if !path || !rnum || rnum < 1
206: rv = procmisc(path, rnum, opts, omode)
207: return rv
208: end
parse arguments of read command
# File tchtest.rb, line 119
119: def runread
120: path = nil
121: omode = 0
122: i = 1
123: while i < ARGV.length
124: if !path && ARGV[i] =~ /^-/
125: if ARGV[i] == "-nl"
126: omode |= HDB::ONOLCK
127: elsif ARGV[i] == "-nb"
128: omode |= HDB::OLCKNB
129: else
130: usage
131: end
132: elsif !path
133: path = ARGV[i]
134: else
135: usage
136: end
137: i += 1
138: end
139: usage if !path
140: rv = procread(path, omode)
141: return rv
142: end
parse arguments of remove command
# File tchtest.rb, line 146
146: def runremove
147: path = nil
148: omode = 0
149: i = 1
150: while i < ARGV.length
151: if !path && ARGV[i] =~ /^-/
152: if ARGV[i] == "-nl"
153: omode |= HDB::ONOLCK
154: elsif ARGV[i] == "-nb"
155: omode |= HDB::OLCKNB
156: else
157: usage
158: end
159: elsif !path
160: path = ARGV[i]
161: else
162: usage
163: end
164: i += 1
165: end
166: usage if !path
167: rv = procremove(path, omode)
168: return rv
169: end
parse arguments of write command
# File tchtest.rb, line 65
65: def runwrite
66: path = nil
67: rnum = nil
68: bnum = nil
69: apow = nil
70: fpow = nil
71: opts = 0
72: omode = 0
73: as = false
74: i = 1
75: while i < ARGV.length
76: if !path && ARGV[i] =~ /^-/
77: if ARGV[i] == "-tl"
78: opts |= HDB::TLARGE
79: elsif ARGV[i] == "-td"
80: opts |= HDB::TDEFLATE
81: elsif ARGV[i] == "-tb"
82: opts |= HDB::TBZIP
83: elsif ARGV[i] == "-tt"
84: opts |= HDB::TTCBS
85: elsif ARGV[i] == "-nl"
86: omode |= HDB::ONOLCK
87: elsif ARGV[i] == "-nb"
88: omode |= HDB::OLCKNB
89: elsif ARGV[i] == "-as"
90: as = true
91: else
92: usage
93: end
94: elsif !path
95: path = ARGV[i]
96: elsif !rnum
97: rnum = ARGV[i].to_i
98: elsif !bnum
99: bnum = ARGV[i].to_i
100: elsif !apow
101: apow = ARGV[i].to_i
102: elsif !fpow
103: fpow = ARGV[i].to_i
104: else
105: usage
106: end
107: i += 1
108: end
109: usage if !path || !rnum || rnum < 1
110: bnum = bnum ? bnum : -1
111: apow = apow ? apow : -1
112: fpow = fpow ? fpow : -1
113: rv = procwrite(path, rnum, bnum, apow, fpow, opts, omode, as)
114: return rv
115: end
print the usage and exit
# File tchtest.rb, line 43
43: def usage
44: STDERR.printf("%s: test cases of the hash database API\n", $progname)
45: STDERR.printf("\n")
46: STDERR.printf("usage:\n")
47: STDERR.printf(" %s write [-tl] [-td|-tb|-tt] [-nl|-nb] [-as] path rnum" +
48: " [bnum [apow [fpow]]]\n", $progname)
49: STDERR.printf(" %s read [-nl|-nb] path\n", $progname)
50: STDERR.printf(" %s remove [-nl|-nb] path\n", $progname)
51: STDERR.printf(" %s misc [-tl] [-td|-tb|-tt] [-nl|-nb] path rnum\n", $progname)
52: STDERR.printf("\n")
53: exit(1)
54: end