// Path: classes/ch/loway/oss/slicedbread/messages/Msg.java
// public class Msg {
// 
//     private PID  fromPid   = null;
//     private PID  toPid     = null;
//     private long sentOn    = 0L;
//     private int  replyTo   = 0;
// 
//     // ======================================================
//     //        m e t o d i     d i     a c c e s s o
//     // ======================================================
// 
// 
//     /**
//      * @return the sender Pid
//      */
//     public PID getFromPid() {
//         return fromPid;
//     }
// 
//     /**
//      * @param fromPid the fromPid to set
//      */
//     public void setFromPid(PID fromPid) {
//         this.fromPid = fromPid;
//     }
// 
//     /**
//      * @return the toPid
//      */
//     public PID getToPid() {
//         return toPid;
//     }
// 
//     /**
//      * @param toPid the toPid to set
//      */
//     public void setToPid(PID toPid) {
//         this.toPid = toPid;
//     }
// 
//     /**
//      * @return the sentOn
//      */
//     public long getSentOn() {
//         return sentOn;
//     }
// 
//     /**
//      * @param sentOn the sentOn to set
//      */
//     public void setSentOn(long sentOn) {
//         this.sentOn = sentOn;
//     }
// 
//     /**
//      * @return the replyTo
//      */
//     public int getReplyTo() {
//         return replyTo;
//     }
// 
//     /**
//      * @param replyTo the replyTo to set
//      */
//     public void setReplyTo(int replyTo) {
//         this.replyTo = replyTo;
//     }
// 
// 
// 
//     // metodi comuni
// 
//     /**
//      * Use only for debug - the builder is pretty unefficient.
//      * 
//      * @return a serialized view.
//      */
// 
//     @Override
//     public String toString() {
//         return "F:" + fromPid
//                 + " T:" + toPid
//                 + ( replyTo > 0 ? " R: " + replyTo : "");
//     }
// 
// 
//     /**
//      * Imposta i recipients.
//      * 
//      * @param from
//      * @param to
//      */
//     public void setRecipients( PID from, PID to) {
//         setFromPid(from);
//         setToPid(to);
//     }
// 
// }
// 
// Path: classes/ch/loway/oss/slicedbread/messages/MsgCommon.java
// public class MsgCommon  extends Msg {
// 
//     @Override
//     public String toString() {
//         return super.toString();
//     }
// 
// }


import java.util.List;
import ch.loway.oss.slicedbread.messages.Msg;
import ch.loway.oss.slicedbread.messages.MsgCommon;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
        long t0 = System.currentTimeMillis();
        final int MAX_QUEUED = 500;

        int totalCounter = 0;

        for ( int i = 0;i < N_LOAD; i++ ) {

            int howManyForIter = i % MAX_QUEUED;

            for ( int n = 0; n < howManyForIter; n++ ) {
                q.push( new MsgNum(i) );
            }

            MsgNum recvd = null;
            do {
                recvd = (MsgNum) q.pull();
                totalCounter += 1;
            } while ( recvd != null );                        
        }

        long dur = System.currentTimeMillis() - t0;
        System.out.println( "Enqueued " + totalCounter + " msgs in " + dur + "ms");
    }



    /**
     * Un messaggio che contiene un numero (per test)
     */

// Path: classes/ch/loway/oss/slicedbread/messages/Msg.java
// public class Msg {
// 
//     private PID  fromPid   = null;
//     private PID  toPid     = null;
//     private long sentOn    = 0L;
//     private int  replyTo   = 0;
// 
//     // ======================================================
//     //        m e t o d i     d i     a c c e s s o
//     // ======================================================
// 
// 
//     /**
//      * @return the sender Pid
//      */
//     public PID getFromPid() {
//         return fromPid;
//     }
// 
//     /**
//      * @param fromPid the fromPid to set
//      */
//     public void setFromPid(PID fromPid) {
//         this.fromPid = fromPid;
//     }
// 
//     /**
//      * @return the toPid
//      */
//     public PID getToPid() {
//         return toPid;
//     }
// 
//     /**
//      * @param toPid the toPid to set
//      */
//     public void setToPid(PID toPid) {
//         this.toPid = toPid;
//     }
// 
//     /**
//      * @return the sentOn
//      */
//     public long getSentOn() {
//         return sentOn;
//     }
// 
//     /**
//      * @param sentOn the sentOn to set
//      */
//     public void setSentOn(long sentOn) {
//         this.sentOn = sentOn;
//     }
// 
//     /**
//      * @return the replyTo
//      */
//     public int getReplyTo() {
//         return replyTo;
//     }
// 
//     /**
//      * @param replyTo the replyTo to set
//      */
//     public void setReplyTo(int replyTo) {
//         this.replyTo = replyTo;
//     }
// 
// 
// 
//     // metodi comuni
// 
//     /**
//      * Use only for debug - the builder is pretty unefficient.
//      * 
//      * @return a serialized view.
//      */
// 
//     @Override
//     public String toString() {
//         return "F:" + fromPid
//                 + " T:" + toPid
//                 + ( replyTo > 0 ? " R: " + replyTo : "");
//     }
// 
// 
//     /**
//      * Imposta i recipients.
//      * 
//      * @param from
//      * @param to
//      */
//     public void setRecipients( PID from, PID to) {
//         setFromPid(from);
//         setToPid(to);
//     }
// 
// }
// 
// Path: classes/ch/loway/oss/slicedbread/messages/MsgCommon.java
// public class MsgCommon  extends Msg {
// 
//     @Override
//     public String toString() {
//         return super.toString();
//     }
// 
// }


// Path: tests/ch/loway/oss/slicedbread/containers/MsgQueueTest.java
import java.util.List;
import ch.loway.oss.slicedbread.messages.Msg;
import ch.loway.oss.slicedbread.messages.MsgCommon;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

        long t0 = System.currentTimeMillis();
        final int MAX_QUEUED = 500;

        int totalCounter = 0;

        for ( int i = 0;i < N_LOAD; i++ ) {

            int howManyForIter = i % MAX_QUEUED;

            for ( int n = 0; n < howManyForIter; n++ ) {
                q.push( new MsgNum(i) );
            }

            MsgNum recvd = null;
            do {
                recvd = (MsgNum) q.pull();
                totalCounter += 1;
            } while ( recvd != null );                        
        }

        long dur = System.currentTimeMillis() - t0;
        System.out.println( "Enqueued " + totalCounter + " msgs in " + dur + "ms");
    }



    /**
     * Un messaggio che contiene un numero (per test)
     */

    public static class MsgNum extends MsgCommon {