#include <stdio.h>

#define testHEAP

#include "./macro/macroSTD.h"

int f(int v)
{
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
return v;
}

int f2(int v)
{
    v;
    int i;
    for (i=1;i<=16;i=i<<1)
        v |= v >> i;
    return ++v;
}

int main()
{
    printf("inclusion of library success\n");
    
    printf( "\nstack test\n");
    int stack[20],
        st=0;
    
    foreach(stack,20,clr);
    foreach(stack,20,prt);
    printf("\n");
    
    stack[push(st)] = 5;
    stack[push(st)] = 6;
    stack[push(st)] = 7;
    stack[push(st)] = 8;
    
    foreach(stack,st,prt);
    printf("\n");
    
    pop(st);
    
    foreach(stack,st,prt);
    printf("\n");
    
    printf("%d \n", stack[pop(st)]);
    foreach(stack,st,prt);
    printf("\n");
    
    printf( "\nswap test\n");
   
    int a=5,
        b=6;
    printf("a=%d, b=%d \n",a,b);
    swap(a,b);
    printf("a=%d, b=%d \n",a,b);
    
    int arr[5];
    arr[2] = 7;
    arr[4] = 8;
    printf("arr[2]=%d, arr[4]=%d \n",arr[2],arr[4]);
    swap(arr[2],arr[4]);
    printf("arr[2]=%d, arr[4]=%d \n",arr[2],arr[4]);
    
    
    printf( "\nheap test\n");
    int heap[11],
        hp = 0;
    clear(heap,11);
    foreach(heap,11,prt);
    end();
    
    
    hp = hpush(heap,hp,5);
    hp = hpush(heap,hp,6);
    hp = hpush(heap,hp,1);
    hp = hpush(heap,hp,7);
    hp = hpush(heap,hp,3);
    hp = hpush(heap,hp,9);
    hp = hpush(heap,hp,8);
    hp = hpush(heap,hp,4);
    hp = hpush(heap,hp,2);
    foreach(heap,11,prt);
    end();
    hp = hpop(heap,hp);
    foreach(heap,11,prt);
    end();
    hp = hpop(heap,hp);
    foreach(heap,11,prt);
    end();
    hp = hpop(heap,hp);
    foreach(heap,11,prt);
    end();
    hp = hpop(heap,hp);
    foreach(heap,11,prt);
    end();
    hp = hpop(heap,hp);
    foreach(heap,11,prt);
    end();
    hp = hpop(heap,hp);
    foreach(heap,11,prt);
    end();
    hp = hpop(heap,hp);
    foreach(heap,11,prt);
    end();
    hp = hpop(heap,hp);
    foreach(heap,11,prt);
    end();
    
    printf("\nreversed stack test\n");
    int rstack[11];
    int rspp = rsp(11);
    foreach(rstack,11,clr);
    foreach(rstack,11,prt);
    end();
    
    rstack[rpush(rspp)] = 5;
    foreach(rstack,11,prt);
    end();
    rstack[rpush(rspp)] = 4;
    foreach(rstack,11,prt);
    end();
    rstack[rpush(rspp)] = 6;
    foreach(rstack,11,prt);
    end();
    rstack[rpush(rspp)] = 3;
    foreach(rstack,11,prt);
    end();
    rstack[rpush(rspp)] = 7;
    foreach(rstack,11,prt);
    end();
    printf("pop %d\n", rstack[rpop(rspp)]);
    printf("pop %d\n", rstack[rpop(rspp)]);
    printf("pop %d\n", rstack[rpop(rspp)]);
    printf("pop %d\n", rstack[rpop(rspp)]);
    printf("pop %d\n", rstack[rpop(rspp)]);
    
    
    return 0;
}
