//===== rAthena Script =======================================
//= Sample: CheckWeight
//===== By: ==================================================
//= rAthena Dev Team
//===== Last Updated: ========================================
//= 20121113
//===== Description: ========================================= 
//= Demonstrates 'checkweight' command.
//============================================================

prontera,161,181,6	script	ChkSpace	763,{

function ChkResult;
function FinalReport;

L_RESET:
	resetlvl(1);
	getinventorylist; 
	for(set .@i,0; .@i < @inventorylist_count; set .@i,.@i+1){	
		delitem(@inventorylist_id[.@i],@inventorylist_amount[.@i]); //clear inventory
	}
	

L_TEST1: //basic backward chk
	.@testid = 0;
	.@succes = 0;
	.@ret = checkweight(512,10);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be success
	.@ret =	checkweight("Apple",10);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be success
	.@ret = checkweight(6320,33000);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure too many item amount item weight=0
	.@ret = checkweight("Premium_Reset_Stone",33000);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure too many item amount
	.@ret = checkweight(717,500);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be success weight based on max weight=2030
	.@ret = checkweight(717,1000);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure weight based on max weight=2030
	.@ret = checkweight(2794,100);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be success
	.@ret = checkweight(2794,101);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure (with MAX_INVENTORY = 100)
	.@ret = checkweight(-1,1);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure invalide item id
	.@ret = checkweight(512,0);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure invalide amount

	debugmes "End backward test";
	FinalReport(.@testid,.@succes);


L_TEST2: //update using list test
	.@testid = 0;
	.@succes = 0;

	.@ret = checkweight(512,10,513,10);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be success
	.@ret =	checkweight("Apple",10,"Banana",10);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be success
	.@ret = checkweight(512,80,513,33000);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure
	.@ret = checkweight("Apple",80,"Banana",33000);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure too many item amount
	.@ret = checkweight("Apple",10,"Banana",21,512);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure invalid nb of args
	.@ret = checkweight(717,500,716,100);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be succes weight 1800/2030
	.@ret = checkweight(717,500,716,500);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure weight 3000/2030
	.@ret = checkweight(2794,95,2795,5);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be success 
	.@ret = checkweight(2794,95,2795,10);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure (with MAX_INVENTORY = 100)
	.@ret = checkweight(512,1,-1,1);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure invalide item id
	.@ret = checkweight(512,1,513,0);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure invalide amount
	.@ret = checkweight(6320,31000,6320,2000);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure overamount inventory
	.@ret = checkweight(512,1,513,1,514,1,515,1);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be sucess
	
	debugmes "End update by list tests";
	FinalReport(.@testid,.@succes);

L_TEST3: //update using array tests
	.@testid = 0;
	.@succes = 0;

	setarray .@item[0], 512,513,514,515;
        setarray .@count[0], 1,5,9,12;
	.@ret = checkweight2(.@item,.@count);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be sucess
	cleararray .@item[0], 0, 4;
	cleararray .@count[0], 0, 4;
	setarray .@item[0], 512,513,514,515;
        setarray .@count[0], 1,5,-1,12;
	.@ret = checkweight2(.@item,.@count);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure, invalide amout
	cleararray .@item[0], 0, 4;
	cleararray .@count[0], 0, 4;
	setarray .@item[0], 512,513,514,-1;
        setarray .@count[0], 1,5,15,12;
	.@ret = checkweight2(.@item,.@count);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure, invalide id
	cleararray .@item[0], 0, 4;
	cleararray .@count[0], 0, 4;
	setarray .@item[0], 717,715,716,714;
        setarray .@count[0], 300,300,300,300;
	.@ret = checkweight2(.@item,.@count);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure, total by weight
	cleararray .@item[0], 0, 4;
	cleararray .@count[0], 0, 4;
	setarray .@item[0], 6320,6320;
        setarray .@count[0], 31000,2000;
	.@ret = checkweight2(.@item,.@count);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure, total by weight
	cleararray .@item[0], 0, 2;
	cleararray .@count[0], 0, 2;
	setarray .@item[0], 2794,2795;
        setarray .@count[0], 95,5;
	.@ret = checkweight2(.@item,.@count);
	set .@succes,.@succes+ChkResult(.@testid++,1,.@ret); //should be success
        setarray .@count[0], 95,10;
	.@ret = checkweight2(.@item,.@count);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure overamount item
	cleararray .@item[0], 0, 2;
	cleararray .@count[0], 0, 2;
	setarray .@item[0], 6320,6320,512;
        setarray .@count[0], 1,3;
	.@ret = checkweight2(.@item,.@count);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure, size mistmatch
	cleararray .@item[0], 0, 3;
	cleararray .@count[0], 0, 2;
	setarray .@item[0], 6320,6320;
        setarray .@count[0], 1,3,5;
	.@ret = checkweight2(.@item,.@count);
	set .@succes,.@succes+ChkResult(.@testid++,0,.@ret); //should be failure, size mistmatch		


	debugmes "End update by array tests";
	FinalReport(.@testid,.@succes);

L_FINAL:
	end;
	

	function ChkResult {
		.@tid = getarg(0);
		.@expected = getarg(1);
		.@ret = getarg(2);
		.@sucess = (.@ret==.@expected);
		debugmes "Test "+.@tid+" = "+(.@sucess?"Sucess":"Fail");
		return .@sucess;
	}

	function FinalReport {
		.@tdone = getarg(0);
		.@succes = getarg(1);
		debugmes "Results = Pass : "+.@succes+"/"+.@tdone+" Fails : "+(.@tdone-.@succes)+"/"+.@tdone;
		if(.@succes != .@tdone) { debugmes "Some failure as occured, enable chkresult print to found out"; }
		return;
	}
}
