Update of /cvsroot/monetdb/MonetDB4/tests/by_Peter/Tests
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4702/tests/by_Peter/Tests
Added Files:
Tag: GDK-2
GNATS-2476.milS GNATS-2719.milS GNATS-2736.milS
evenheight.milS recursion.milS table_orderby.milS trim.milS
tst_append_readonly.milS tst_append_readonly_commit.milS
tst_mmap.milS tst_priv.milS tst_updatestr.milS
tst_updatestr2.milS tst_uselect.milS tst_writestr.milS
Removed Files:
Tag: GDK-2
GNATS-2476.milM GNATS-2719.milM GNATS-2736.milM
evenheight.milM recursion.milM table_orderby.milM trim.milM
tst_append_readonly.milM tst_append_readonly_commit.milM
tst_mmap.milM tst_priv.milM tst_updatestr.milM
tst_updatestr2.milM tst_uselect.milM tst_writestr.milM
Log Message:
propagated changes of Monday Sep 10 2007 - Tuesday Sep 18 2007
from the development trunk to the GDK-2 branch
--- tst_priv.milM DELETED ---
--- NEW FILE: tst_mmap.milS ---
# reduce mem_bigsize to trigger memory mapping
#
vm_minsize(lng(128*1024));
# test memory map of string heap under append
var i := 0;
var b := 20000;
#BIG := new(void,int,50000000); # claim 200MB
var d := new(void,int,b).seqbase([EMAIL PROTECTED]);
# temporarily disable propmask in order to make this bearable
var m := debugmask();
debugmask(2);
while(i < b) d.append(i :+= 1);
debugmask(m);
{
new(void,str,200000).seqbase([EMAIL
PROTECTED]).access(BAT_APPEND).rename("aa").persists(true);
unload("aa");
}
i := 1;
while(i < 10) {
bat("aa").info().reverse().select("theap.storage").reverse().print();
var e := [str]([+](d,b));
#e := [str]([/](d,10000));
print(b :+= 20000);
bat("aa").insert(e);
bat("aa").mmap(1,1,1);
unload("aa");
i :+= 1;
}
bat("aa").info().reverse().select("theap.storage").reverse().print();
bat("aa").persists(false);
commit();
quit();
--- NEW FILE: trim.milS ---
var k1 := new(void,int,1000);
var i := 0;
while(i < 1000) {
k1.insert(nil,i);
i :+= 1;
}
var m1 := new(void,int,1000000);
i := 0;
while(i < 1000) {
m1.insert(k1);
i :+= 1;
}
m1.seqbase([EMAIL PROTECTED]);
dir("tmp");
i := 0;
mem_maxsize(lng(10*1024*1024));
#vm_maxsize(lng(100*1024*1024));
while(i < 10) {
#mem_usage(100000).print();
print("DIR");
dir("b_");
#vm_usage(100000).print();
print("COPY");
var b := m1.copy().rename(sprintf("b_%d",i :+= 1));
b.persists(true).commit();
}
proc countall (..any..) : void {
var i := 0;
while(i < $0) {
i :+= 1;
$(i).count().print();
}
}
dir("b_");
countall(bat("b_1"),bat("b_2"),bat("b_3"),bat("b_4"));
dir("b_");
quit();
--- NEW FILE: tst_append_readonly_commit.milS ---
# reduce mem_bigsize to trigger memory mapping
#
vm_minsize(lng(128*1024));
# test memory map of string heap under append
var i := 0;
var b := 20000;
#BIG := new(void,int,50000000); # claim 200MB
var d := new(void,int,b).seqbase([EMAIL PROTECTED]);
# temporarily disable propmask in order to make this bearable
var m := debugmask();
debugmask(2);
while(i < b) d.append(i :+= 1);
debugmask(m);
{
new(void,str,200000).seqbase([EMAIL
PROTECTED]).access(BAT_READ).rename("aa").persists(true);
commit();
}
i := 1;
while(i < 4) {
bat("aa").info().reverse().select("theap.storage").reverse().print();
var e := [str]([+](d,b));
#e := [str]([/](d,10000));
print(b :+= 20000);
# second insert will trigger a BATmaterialize 'aa' which changes the storage
# from STORE_MMAP to STORE_MEM (which is a bug)
bat("aa").access(BAT_APPEND).insert(e).access(BAT_READ);
commit();
i :+= 1;
}
bat("aa").info().reverse().select("theap.storage").reverse().print();
bat("aa").persists(false);
commit();
quit();
--- GNATS-2736.milM DELETED ---
--- evenheight.milM DELETED ---
--- NEW FILE: GNATS-2736.milS ---
# the following implementation paths in the standard pump implementation exist:
#
# proc_sort()ed
# proc_hash
# packed_sort()ed
# packed_hash
# direct_sort()ed_chr
# direct_sort()ed_bte
# direct_sort()ed_sht
# direct_sort()ed_int
# direct_sort()ed_wrd
# direct_sort()ed_void
# direct_hash_chr
# direct_hash_bte
# direct_hash_sht
# direct_hash_int
# direct_hash_wrd
#
# this script intends to test them all.
module(aggr);
var b_int := bat(int,str).insert(1,"1").insert(2,"2").insert(1,"1");
b_int.insert(3,"3").insert(4,"4").insert(5,"5").insert(6,"6");
b_int.insert(3,"3").insert(4,"4").insert(5,"5").insert(6,"6");
var b_wrd := [wrd](b_int.reverse()).reverse();
var b_sht := [sht](b_int.reverse()).reverse();
var b_bte := [bte](b_int.reverse()).reverse();
var b_chr := [chr](b_int.reverse()).reverse();
var b_str := [str](b_int.reverse()).reverse();
var v_oid := bat(void,str).insert(nil,"1").insert(nil,"2").insert(nil,"3");
v_oid.insert(nil,"4").insert(nil,"5").insert(nil,"6").seqbase([EMAIL
PROTECTED]);
var e_int :=
bat(int,void).insert(1,nil).insert(3,nil).insert(4,nil).insert(5,nil);
e_int.insert(6,nil).insert(7,nil).insert(8,nil).col_name("e_int");
var e_wrd := [wrd](e_int.reverse()).reverse().col_name("e_wrd");
var e_sht := [sht](e_int.reverse()).reverse().col_name("e_sht");
var e_bte := [bte](e_int.reverse()).reverse().col_name("e_bte");
var e_chr := [chr](e_int.reverse()).reverse().col_name("e_chr");
var e_str := [str](e_int.reverse()).reverse().col_name("e_str");
var e_oid := [oid](e_int.reverse()).reverse().col_name("e_oid");
var tests := bat(bat,bat);
tests.insert(b_wrd.col_name("b_wrd"), e_wrd);
tests.insert(b_int.col_name("b_int"), e_int);
tests.insert(b_sht.col_name("b_sht"), e_sht);
tests.insert(b_bte.col_name("b_bte"), e_bte);
tests.insert(b_chr.col_name("b_chr"), e_chr);
tests.insert(b_str.col_name("b_str"), e_str);
tests.insert(v_oid.col_name("v_oid"), e_oid);
tests.insert(b_wrd.sort().col_name("s_wrd"), e_wrd);
tests.insert(b_int.sort().col_name("s_int"), e_int);
tests.insert(b_sht.sort().col_name("s_sht"), e_sht);
tests.insert(b_bte.sort().col_name("s_bte"), e_bte);
tests.insert(b_chr.sort().col_name("s_chr"), e_chr);
tests.insert(b_str.sort().col_name("s_str"), e_str);
proc ku(bat[any,any] b) : bat[any,any] {
return kunique(b);
}
proc mstr(int i) : str {
if (isnil(i)) {
return "nil";
}
return str(i);
}
proc mset_print(bat[any,bat] m) :void {
[EMAIL PROTECTED]() {
var h := $h;
var t := $t;
[EMAIL PROTECTED]() {
printf("\t%s\t%s\n", mstr(int(h)), mstr(int($t)));
}
}
}
proc set_print(bat[any,any] b) :void {
[EMAIL PROTECTED]() {
printf("\t%s\t%s\n", mstr(int($h)), mstr(int($t)));
}
}
# start testing, switch mask that tells us which implementation is actually used
debugmask(131072);
[EMAIL PROTECTED]() {
printf("\n# test proc {kunique}(%s)\n", $h.bbpname());
{ku}($h).mset_print();
}
[EMAIL PROTECTED]() {
printf("\n# test proc {kunique}(%s,%s)\n", $h.bbpname(), $t.bbpname());
{ku}($h,$t).mset_print();
}
[EMAIL PROTECTED]() {
printf("\n# test packed {kunique}(%s)\n", $h.bbpname());
{kunique}($h).mset_print();
}
[EMAIL PROTECTED]() {
printf("\n# test packed {max}(%s,%s)\n", $h.bbpname(), $t.bbpname());
{max}($h,$t).set_print();
}
[EMAIL PROTECTED]() {
printf("\n# test direct {max}(%s)\n", $h.bbpname());
{max}([int]($h)).set_print();
}
[EMAIL PROTECTED]() {
printf("\n# test direct {max}(%s,%s)\n", $h.bbpname(), $t.bbpname());
{max}([int]($h),$t).set_print();
}
quit();
--- NEW FILE: evenheight.milS ---
# The main procedure is evenheight(bat_param,nranges)
# it produces a new bat with an even-height remapping of tail-values.
# this computes the weighed midpoint of a range 'low'..'high'
# the weights are taken from the sorted histogram 'hst'
#
proc compute_mid(bat hst, any low, any high) : void {
var members := hst.reverse().select(low,high);
var weighed := new(int, members.ttype(), members.count());
var mid := nil.cast(hst.htype());
var cum := 0;
[EMAIL PROTECTED]() {
cum := cum + $h;
weighed.insert(cum, $t);
}
[EMAIL PROTECTED]() {
mid := $t;
if ($h >= (cum / 2)) break;
}
return mid;
}
# we construct an equal-height partitioning range for the tail columns
# of a bat. This partitioning range is represented by a new 'range-bat'.
# Each BUN in the range-bat represents 1 range. Its tail contains the maximum
# range value (tails are sorted); its head contains the representative value.
#
# The below proc constructs such a range-bat iteratively using
# a histogram. This algorithms dynamically adapts the ideal
# group-size 'ideal' to obtain a nicely balanced result.
#
proc range_bat(bat b, int n) : bat {
var histo := b.histogram().sort(); # sort it!
var ranges := new(b.ttype(), b.ttype(), (n*4)/3);
var cursize := 0;
var items_left := b.count();
var mid_h, last_h, first_h;
[EMAIL PROTECTED]() {
var idealsize := items_left/n;
if (cursize = 0) {
first_h := $h; # the lowest element of the range
}
cursize := cursize + $t;
if (cursize >= idealsize) {
# ok, we must create a new group
if ((cursize - idealsize) <= (idealsize - (cursize- $t))) {
items_left := items_left - cursize;
mid_h := histo.compute_mid(first_h, $h);
last_h := $h;
cursize := 0;
} else {
# group would be too large with the current
# element in it. Keep the current for the next grp.
#
items_left := items_left - (cursize - $t);
mid_h := histo.compute_mid(first_h, last_h);
first_h := $h;
cursize := $t;
}
# insert the new group description
ranges.insert(mid_h, last_h);
n := n - 1;
}
last_h := $h;
}
return ranges;
}
# use the range-bat to convert one value to its representative value.
proc convert_val(any v, any rng) : any {
[EMAIL PROTECTED]() {
if ($t >= v) return $h;
}
return nil.cast(v.type());
}
# OVERALL USEABLE PROC
proc evenheight(bat b, int n) : bat {
var rng := range_bat(b, n);
print(rng); # print the range (for debugging purposes)
return [convert_val](b, const rng);
}
# TESTING
var TheSize := 1000;
var def_tpe := new(int,int);
var i := 0;
while (i<TheSize) { def_tpe.insert(i,rand()); i:+=1; }
var a := [str](def_tpe.mark([EMAIL PROTECTED])).reverse().mirror();
var b := a.range_bat(10);
var c := [int](b.reverse().mirror());
var d := [int](b.reverse());
print([-](c,d),b.reverse());
var aa := a.evenheight(9);
var z1 := new(int,int);
var z2 := new(int,int);
i := 0;
while (i<TheSize) { z1.insert(i,rand()); z2.insert(i,i); i:+=1; }
printf("#~BeginVariableOutput~#\n"); var z1z:=z1.evenheight(8);
printf("#~EndVariableOutput~#\n");
var z2z:=z2.evenheight(8);
quit();
--- tst_append_readonly_commit.milM DELETED ---
--- trim.milM DELETED ---
--- tst_mmap.milM DELETED ---
--- NEW FILE: tst_priv.milS ---
# test change of private mmap -> malloced under extends
new(void,str,1000000).persists(true).access(BAT_WRITE).rename("a");
var d := new(void,int,1000);
var i := 0;
while(i < 1000) d.insert(nil,i :+= 1);
d := [str](d).seqbase([EMAIL PROTECTED]);
bat("a").seqbase([EMAIL PROTECTED]).insert(d);
i := 0;
while(i < 100) {
bat("a").insert(d.seqbase(oid(bat("a").count())));
i :+= 1;
}
bat("a").mmap(1,1,1);
unload("a");
bat("a").info().reverse().select("theap.storage").reverse().print();
[int](bat("a").mirror());
var e := [str]([int](bat("a").mirror()));
debugmask(49);
bat("a").insert(e);
debugmask(9);
#bat("a").mmap(1,1,1);
bat("a").info().reverse().select("theap.storage").reverse().print();
e := [str]([int](bat("a").mirror()));
debugmask(49);
bat("a").insert(e);
debugmask(9);
bat("a").info().reverse().select("theap.storage").reverse().print();
bat("a").append("make dirty..");
commit();
bat("a").destroy();
commit();
quit();
--- NEW FILE: tst_updatestr2.milS ---
bat("ab").slice(0,2).print();
quit();
--- NEW FILE: GNATS-2476.milS ---
var b := bat(int,int);
b.insert(1,1);
b.insert(9,2); # in same hash list (default hash-mask=7, 1&7=9&7=1)
b.accbuild("hash");
b.commit();
b.delete(9); # triggers move (1,1) over (9,2); hash corrupt
b.delete(); # delete (1,1) without hash-lookup
b.find(1).print(); # still finds (1,1) !
quit();
--- NEW FILE: GNATS-2719.milS ---
var b := bat(void,bit);
b.insert(nil,true);
b.insert(nil,true);
b.insert(nil,true);
b.insert(nil,true);
b.seqbase([EMAIL PROTECTED]);
var s := b.select(true);
b.histogram().print();
quit();
--- recursion.milM DELETED ---
--- NEW FILE: tst_writestr.milS ---
# test memory map of string heap under append
vm_minsize(lng(128*1024));
var i := 0;
var b := 500000;
#BIG := new(void,int,50000000); # claim 200MB
var d := new(void,int,b).seqbase([EMAIL PROTECTED]);
# temporarily disable propmask in order to make this bearable
var m := debugmask();
debugmask(2);
while(i < b) d.append(i :+= 1);
debugmask(m);
{
new(void,str,1000000).seqbase([EMAIL
PROTECTED]).access(BAT_WRITE).rename("aa").persists(true);
unload("aa");
}
commit();
i := 0;
while(true) {
bat("aa").info().reverse().select("theap.storage").reverse().print();
var e := [str]([+](d,b));
#e := [str]([/](d,10000));
print(b :+= 500000);
bat("aa").insert(e);
bat("aa").mmap(1,1,1);
i :+= 1;
if (i = 4) { break; }
unload("aa");
}
{
bat("aa").persists(false);
commit();
}
quit();
--- tst_append_readonly.milM DELETED ---
--- NEW FILE: tst_append_readonly.milS ---
# reduce mem_bigsize to trigger memory mapping
#
vm_minsize(lng(128*1024));
# test memory map of string heap under append
var i := 0;
var b := 20000;
#BIG := new(void,int,50000000); # claim 200MB
var d := new(void,int,b).seqbase([EMAIL PROTECTED]);
# temporarily disable propmask in order to make this bearable
var m := debugmask();
debugmask(2);
while(i < b) d.append(i :+= 1);
debugmask(m);
{
new(void,str,200000).seqbase([EMAIL
PROTECTED]).access(BAT_READ).rename("aa").persists(true);
}
i := 1;
while(i < 4) {
bat("aa").info().reverse().select("theap.storage").reverse().print();
var e := [str]([+](d,b));
#e := [str]([/](d,10000));
print(b :+= 20000);
# second insert will trigger a BATmaterialize 'aa' which changes the storage
# from STORE_MMAP to STORE_MEM (which is a bug)
bat("aa").access(BAT_APPEND).insert(e).access(BAT_READ);
i :+= 1;
}
bat("aa").info().reverse().select("theap.storage").reverse().print();
bat("aa").persists(false);
commit();
quit();
--- tst_writestr.milM DELETED ---
--- NEW FILE: recursion.milS ---
# This tests the saveguards for highly recursive programs.
# The first p() invocation will give a physical out of stack error.
# The others together generate a physical out-of-context error.
# This, however, is rather undeterministic and depends
# on the parallelism achieved.
# What it *should* do is not crash, and print the [42]
module(alarm);
proc p;
proc p(int i) : void { if (i < 10000) p(i+1); }
{
p(100).fork();
p(300).fork();
p(301).fork();
p(302).fork();
p(303).fork();
p(304).fork();
sleep(10);
}
print(42);
quit();
--- GNATS-2719.milM DELETED ---
--- tst_updatestr2.milM DELETED ---
--- GNATS-2476.milM DELETED ---
--- NEW FILE: tst_updatestr.milS ---
# test memory map of string heap under append
vm_minsize(lng(128*1024));
var i := 0;
var b := 500000;
#BIG := new(void,int,50000000); # claim 200MB
var d := new(void,int,b).seqbase([EMAIL PROTECTED]);
# temporarily disable propmask in order to make this bearable
var m := debugmask();
debugmask(2);
while(i < b) d.append(i :+= 1);
debugmask(m);
{
new(void,str,1000000).seqbase([EMAIL
PROTECTED]).access(BAT_WRITE).rename("ab").persists(true);
bat("ab").insert([str](d));
bat("ab").count().print();
bat("ab").slice(0,2).print();
unload("ab");
}
commit();
i := 0;
while(true) {
bat("ab").info().reverse().select("theap.storage").reverse().print();
var e := [str]([+](d,b));
#e := [str]([/](d,10000));
print(b :+= 500000);
bat("ab").replace(e);
bat("ab").count().print();
bat("ab").slice(0,2).print();
bat("ab").mmap(1,1,1);
i :+= 1;
if (i = 4) { break; }
unload("ab");
}
bat("ab").slice(0,2).print();
quit();
--- NEW FILE: table_orderby.milS ---
module(xtables);
var a := new(void,str);
a.insert(nil, "the");
a.insert(nil, "cat");
a.insert(nil, "sat");
a.insert(nil, "on");
a.insert(nil, "the");
a.insert(nil, "mat");
var c := a.copy().seqbase([EMAIL PROTECTED]);
var b := [str](c);
print(c,b);
var d := c.mark([EMAIL PROTECTED]);
print("1",c,d);
print("2",c,d);
var e := [oid](d).access(BAT_WRITE).append([oid]([*]([int](d),2)));
e := e.insert(e.copy()).reverse().sort().mark([EMAIL PROTECTED]).reverse();
var f :=
a.copy().access(BAT_WRITE).insert(a).insert(a).insert(a).seqbase([EMAIL
PROTECTED]);
var g := [>]([int](f.mirror()),12);
print("1",e,f,g);
print("1,2",e,f,g);
print("2",e,f,g);
print("2,1",e,f,g);
print("3,1,2",e,f,g);
quit();
--- tst_uselect.milM DELETED ---
--- NEW FILE: tst_uselect.milS ---
proc genbat(int size, int perc) : bat[void,oid] {
var b := new(void, oid, size);
var t := new(void, oid, 100);
var i := 0;
while(i < 100) {
if (i < perc) {
t.insert(nil,oid(nil));
} else {
t.insert(nil,oid(i));
}
i :+= 1;
}
i := size / 100;
while((i :-= 1) >= 0) {
b.insert(t);
}
return b.seqbase([EMAIL PROTECTED]);
}
var size := 10000;
while(size <= 1000000) {
var perc := 0;
while(perc <= 100) {
var m := debugmask();
debugmask(2);
var b := genbat(size, perc);
debugmask(m);
kdiff(b,b.uselect(oid(nil))).count().print();
printf("kdiff(b,b.uselect(oid(nil))) size=%d perc=%d\n", size, perc);
[ifelse]([isnil](b), b).count().print();
printf("[ifelse]([isnil](b),b) size=%d perc=%d\n", size, perc);
perc :+= 10;
}
size :*= 10;
}
quit();
--- table_orderby.milM DELETED ---
--- tst_updatestr.milM DELETED ---
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins