add test 3018 (note that you need a new fleet jarball for this)
authorAdam Megacz <adam.megacz@sun.com>
Sun, 23 Nov 2008 23:06:38 +0000 (23:06 +0000)
committerAdam Megacz <adam.megacz@sun.com>
Sun, 23 Nov 2008 23:06:38 +0000 (23:06 +0000)
testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java
testCode/com/sun/vlsi/chips/marina/test/MarinaUtils.java

index 09036e9..aef4aee 100644 (file)
@@ -28,6 +28,8 @@ import edu.berkeley.fleet.api.Instruction;
 import edu.berkeley.fleet.api.Predicate;
 import edu.berkeley.fleet.api.Instruction.Set.SetDest;
 import edu.berkeley.fleet.api.Instruction.Set.SetSource;
+import edu.berkeley.fleet.marina.MarinaFleet;
+import edu.berkeley.fleet.marina.MarinaPath;
 
 /**
  * Tests for Marina
@@ -127,6 +129,22 @@ public class MarinaTest {
                        Infrastructure.exit(2);
                }
        }
+    public static void fatalIfBitVectorsDoNotMatch(BitVector bv1, BitVector bv2) {
+        // FIXME: better error reporting needed here
+
+        fatal(bv1.getNumBits()!=bv2.getNumBits(), "lengths do not match");
+
+        boolean mismatch = false;
+        String err = "";
+        for(int i=0; i<bv1.getNumBits(); i++) {
+            if (bv1.get(i) != bv2.get(i)) {
+                mismatch = true;
+                err += ""+i+", ";
+            }
+        }
+        fatal(mismatch, "bit vectors do not match on bits " + err);
+    }
+
        private static void printTestTime() {
        long endTime = System.currentTimeMillis();
        System.out.println("Test took: "+(endTime-startTime)/1000.0+"  sec");
@@ -1394,6 +1412,50 @@ public class MarinaTest {
        prln("End testFlagC");          
     }
 
+    private void sendDataWithPath(Marina marina) {
+        prln("Begin sendDataWithPath");
+        adjustIndent(2);
+
+        getCtrsFlags(marina);
+
+        edu.berkeley.fleet.api.BitVector bv = new edu.berkeley.fleet.api.BitVector(13);
+
+        // alternating ones and zeroes, and then ones in the lower
+        // four bits so it's not symmetric
+        for(int i=0; i<bv.length(); i+=2)
+            bv.set(i, true);
+        for(int i=0; i<4; i++)
+            bv.set(i, true);
+
+        MarinaPath path = new MarinaPath((MarinaFleet)DOCK.getShip().getFleet(), bv);
+
+        prln("send data with path="+bv);
+        marina.instrIn.fill(new Instruction.Move(DOCK,
+                                                 false,                 /* requeueing  */
+                                                 Predicate.IgnoreOLC,   /* predicate   */
+                                                 false,                 /* torpedoable */
+                                                 path,                  /* path        */
+                                                 false,                 /* tokenIn     */
+                                                 false,                 /* dataIn      */
+                                                 false,                 /* latchData   */
+                                                 false,                 /* latchPath   */
+                                                 true,                  /* dataOut     */
+                                                 false                  /* tokenOut    */
+                                                 ));
+
+        List<BitVector> dataItems = marina.data.drainMany();
+        fatal(dataItems.size()!=1, "Expected one data item to emerge but got: "+dataItems.size()+" data items");
+        MarinaPacket mp = new MarinaPacket(dataItems.get(0));
+
+        // the 14th bit of the outbound address cannot be set by the
+        // ship, so we don't care about it
+        fatalIfBitVectorsDoNotMatch(MarinaUtils.berkToSun(bv), mp.path.get(0,13));
+
+        adjustIndent(-2);
+        prln("End sendDataWithPath");
+    }
+
+
     private void sendTorpedo(Marina marina) {
        prln("Begin sendTorpedo");
        adjustIndent(2);
@@ -1630,6 +1692,7 @@ public class MarinaTest {
                 case 3015: testSendAndRecvToken(marina); break;
                 case 3016: sendDataIlcInfinite(marina); break;
                 case 3017: testFlagTruthTable(marina); break;
+                case 3018: sendDataWithPath(marina); break;
 
                default:
                        fatal(true, "Test number: "+testNum+" doesn't exist.");
index 495086f..4e7e7fa 100644 (file)
@@ -444,4 +444,16 @@ public class MarinaUtils {
        return dataTokAddr.get(0, 37);
     }
 
+    public static BitVector berkToSun(edu.berkeley.fleet.api.BitVector berkBits) {
+        BitVector sunBits = new BitVector(berkBits.length(), "berkToSun()");
+        for(int i=0; i<sunBits.getNumBits(); i++) sunBits.set(i, berkBits.get(i));
+        return sunBits;
+    }
+    public static edu.berkeley.fleet.api.BitVector sunToBerk(BitVector sunBits) {
+        edu.berkeley.fleet.api.BitVector berkBits =
+            new edu.berkeley.fleet.api.BitVector(sunBits.getNumBits());
+        for(int i=0; i<sunBits.getNumBits(); i++) berkBits.set(i, sunBits.get(i));
+        return berkBits;
+    }
+
 }
\ No newline at end of file