/* * Copyright (C) 2001, C. Ramakrishnan / Illposed Software. * All rights reserved. * * This code is licensed under the BSD 3-Clause license. * See file LICENSE (or LICENSE.html) for more information. */ package com.illposed.osc; import com.illposed.osc.utility.OSCJavaToByteArrayConverter; /** * This implementation is based on Markus Gaelli and * Iannis Zannos' OSC implementation in Squeak: * http://www.emergent.de/Goodies/ * @see OSCJavaToByteArrayConverter */ public class OSCJavaToByteArrayConverterTest extends junit.framework.TestCase { private void checkResultEqualsAnswer(byte[] result, byte[] answer) { OSCMessageTest.checkResultEqualsAnswer(result, answer); } /** * This is different from the SmallTalk implementation. * In Squeak, this produces: * byte[] answer = {62, 76, (byte) 204, (byte) 204}; * (i.e. answer= {62, 76, -52, -52}) * * The source of this discrepancy is Squeak conversion * routine Float>>asIEEE32BitWord vs. the Java * {@link Float#floatToIntBits(float)}. * * 0.2 asIEEE32BitWord yields: 1045220556 * {@link Float#floatToIntBits(float)} with parameter 0.2f * yields: (int) 1045220557 (VA Java 3.5) * * Looks like there is an OBO bug somewhere -- either Java or Squeak. */ public void testPrintFloat2OnStream() { OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter(); stream.write(new Float(0.2)); byte[] answer = {62, 76, -52, -51}; byte[] result = stream.toByteArray(); checkResultEqualsAnswer(result, answer); } public void testPrintFloatOnStream() { OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter(); stream.write(new Float(10.7567)); byte[] answer = {65, 44, 27, 113}; byte[] result = stream.toByteArray(); checkResultEqualsAnswer(result, answer); } public void testPrintIntegerOnStream() { OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter(); stream.write(new Integer(1124)); byte[] answer = {0, 0, 4, 100}; byte[] result = stream.toByteArray(); checkResultEqualsAnswer(result, answer); } public void testPrintString2OnStream() { OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter(); stream.write("abcd"); byte[] answer = {97, 98, 99, 100, 0, 0, 0, 0}; byte[] result = stream.toByteArray(); checkResultEqualsAnswer(result, answer); } public void testPrintStringOnStream() { OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter(); stream.write("abc"); byte[] answer = {97, 98, 99, 0}; byte[] result = stream.toByteArray(); checkResultEqualsAnswer(result, answer); } public void testPrintBigIntegerOnStream() { OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter(); stream.write(new java.math.BigInteger("1124")); byte[] answer = {0, 0, 0, 0, 0, 0, 4, 100}; byte[] result = stream.toByteArray(); checkResultEqualsAnswer(result, answer); } }