import java.io.*;
import java.net.*;
import java.lang.*;
import java.util.*;

import edu.vt.marian.common.*;


 class TestWeight
   {
    public static void main(String args[])
      {
       Debug debug = null;

       Weight w0 = new Weight(0, debug);
       Weight w1 = new Weight(256, debug);
       Weight w2 = new Weight(1054, debug);
       Weight wTop = new Weight(Weight.topWt);
       System.out.println("Weights are {" + w0.getValue() + "," + w1.getValue() + "," + w2.getValue() + "," +
                          wTop.getValue() + "}.");

       Weight v1 = new Weight(w1);
       Weight v2 = new Weight(w2);

       System.out.println("New Weights are {" + v1.getValue() + "," + v2.getValue() + "}.");

       v1.scale(w2);
       v2.scale(w1);

       System.out.println("New Weights are now {" + v1.getValue() + "," + v2.getValue() + "}.");

       v1.scale(w0);
       v2.scale(wTop);

       System.out.println("New Weights are now {" + v1.getValue() + "," + v2.getValue() + "}.");

	v1.accum(0.5);
	v2.accum(wTop);

       System.out.println("New Weights are now {" + v1.getValue() + "," + v2.getValue() + "}.");

	v1.scale(wTop);
	v2.scale(0.5);

       System.out.println("New Weights are now {" + v1.getValue() + "," + v2.getValue() + "}.");

       ByteArrayOutputStream bos = new ByteArrayOutputStream();
       byte packedWt [];
       v1.writePacked(bos);
       packedWt = bos.toByteArray();
       ByteArrayInputStream bis = new ByteArrayInputStream(packedWt);
       v2.readPacked(bis);

       System.out.println("Packed " + v1.getValue() + " into an array of " + 
                          bos.size() + " bytes; unpacked to " + v2.getValue() + ".");

       bos.reset();
       wTop.writePacked(bos);
       packedWt = bos.toByteArray();
       ByteArrayInputStream bis2 = new ByteArrayInputStream(packedWt);
       v2.readPacked(bis2);

       System.out.println("Packed " + wTop.getValue() + " into an array of " + 
                          bos.size() + " bytes; unpacked to " + v2.getValue() + ".");

       // w1.toStream(System.out);
       // v1.toStream(System.out);
      }
   }

