tests: Port avmplus MOPS tests

This commit is contained in:
Nathan Adams 2023-08-03 00:26:14 +02:00
parent ff01444e63
commit c3a283e23d
55 changed files with 3786 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,183 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* intrinsics.abs
*
* This file declares functions that wrap single ABC opcodes, for
* opcodes that don't have any operands in the ABC stream or any
* explicit control flow. Its easier to write test cases that call
* these functions than to handwrite abcasm.
*
* COMPILE:
* >$ ../../../utils/abcasm/abcasm.sh intrinsics.abs
* >$ mv intrinsics.abc intrinsics.abc_
*/
// script initializer
function main() { returnvoid }
// loads
function LI8(*) { getlocal1 li8 returnvalue }
function LIX8(*) { getlocal1 li8 sxi8 returnvalue }
function LI16(*) { getlocal1 li16 returnvalue }
function LIX16(*) { getlocal1 li16 sxi16 returnvalue }
function LI32(*) { getlocal1 li32 returnvalue }
function LF32(*) { getlocal1 lf32 returnvalue }
function LF64(*) { getlocal1 lf64 returnvalue }
// stores
function SI8(*,*) { getlocal1 getlocal2 si8 returnvoid }
function SI16(*,*) { getlocal1 getlocal2 si16 returnvoid }
function SI32(*,*) { getlocal1 getlocal2 si32 returnvoid }
function SF32(*,*) { getlocal1 getlocal2 sf32 returnvoid }
function SF64(*,*) { getlocal1 getlocal2 sf64 returnvoid }
// sign extension (pure integer ops)
function SXI1(*) { getlocal1 sxi1 returnvalue }
function SXI8(*) { getlocal1 sxi8 returnvalue }
function SXI16(*) { getlocal1 sxi16 returnvalue }
// other
function NEXTNAME(*,int) { getlocal1 getlocal2 nextname returnvalue }
function NEXTVALUE(*,int) { getlocal1 getlocal2 nextvalue returnvalue }
function HASNEXT(*,int):int { getlocal1 getlocal2 hasnext returnvalue }
function CHECKFILTER(*) { getlocal1 checkfilter returnvalue }
// conversion
function ESC_XELEM(*) { getlocal1 esc_xelem returnvalue }
function ESC_XATTR(*) { getlocal1 esc_xattr returnvalue }
function CONVERT_S(*) { getlocal1 convert_s returnvalue }
function CONVERT_I(*) { getlocal1 convert_i returnvalue }
function CONVERT_U(*) { getlocal1 convert_u returnvalue }
function CONVERT_D(*) { getlocal1 convert_d returnvalue }
function CONVERT_B(*) { getlocal1 convert_b returnvalue }
function CONVERT_O(*) { getlocal1 convert_o returnvalue }
function COERCE_B(*) { getlocal1 coerce_b returnvalue }
function COERCE_A(*) { getlocal1 coerce_a returnvalue }
function COERCE_I(*) { getlocal1 coerce_i returnvalue }
function COERCE_D(*) { getlocal1 coerce_d returnvalue }
function COERCE_S(*) { getlocal1 coerce_s returnvalue }
function COERCE_U(*) { getlocal1 coerce_u returnvalue }
function COERCE_O(*) { getlocal1 coerce_o returnvalue }
function ASTYPELATE(*,*) { getlocal1 getlocal2 astypelate returnvalue }
function ISTYPELATE(*,*) { getlocal1 getlocal2 istypelate returnvalue }
function INSTANCEOF(*,*) { getlocal1 getlocal2 instanceof returnvalue }
function IN(*,*) { getlocal1 getlocal2 in returnvalue }
// unary operators
function NEGATE(*) { getlocal1 negate returnvalue }
function INCREMENT(*) { getlocal1 increment returnvalue }
function DECREMENT(*) { getlocal1 decrement returnvalue }
function TYPEOF(*) { getlocal1 typeof returnvalue }
function NOT(*) { getlocal1 not returnvalue }
function BITNOT(*) { getlocal1 bitnot returnvalue } // needs abcasm fix - bitnot stack off by 1
function INCREMENT_I(*) { getlocal1 increment_i returnvalue }
function DECREMENT_I(*) { getlocal1 decrement_i returnvalue }
function NEGATE_I(*) { getlocal1 negate_i returnvalue }
// binary operators
function ADD(*,*) { getlocal1 getlocal2 add returnvalue }
function SUBTRACT(*,*) { getlocal1 getlocal2 subtract returnvalue }
function MULTIPLY(*,*) { getlocal1 getlocal2 multiply returnvalue }
function DIVIDE(*,*) { getlocal1 getlocal2 divide returnvalue }
function MODULO(*,*) { getlocal1 getlocal2 modulo returnvalue }
function LSHIFT(*,*) { getlocal1 getlocal2 lshift returnvalue }
function RSHIFT(*,*) { getlocal1 getlocal2 rshift returnvalue }
function URSHIFT(*,*) { getlocal1 getlocal2 urshift returnvalue }
function BITAND(*,*) { getlocal1 getlocal2 bitand returnvalue }
function BITOR(*,*) { getlocal1 getlocal2 bitor returnvalue }
function BITXOR(*,*) { getlocal1 getlocal2 bitxor returnvalue }
function EQUALS(*,*) { getlocal1 getlocal2 equals returnvalue }
function STRICTEQUALS(*,*) { getlocal1 getlocal2 strictequals returnvalue }
function LESSTHAN(*,*) { getlocal1 getlocal2 lessthan returnvalue }
function LESSEQUALS(*,*) { getlocal1 getlocal2 lessequals returnvalue }
function GREATERTHAN(*,*) { getlocal1 getlocal2 greaterthan returnvalue }
function GREATEREQUALS(*,*) { getlocal1 getlocal2 greaterequals returnvalue }
function ADD_I(*,*) { getlocal1 getlocal2 add_i returnvalue }
function SUBTRACT_I(*,*) { getlocal1 getlocal2 subtract_i returnvalue }
function MULTIPLY_I(*,*) { getlocal1 getlocal2 multiply_i returnvalue }
.script_info {
init : .function_id(main)
traits : {
.trait { kind: method method: .function_id(LI8) name: LI8 }
.trait { kind: method method: .function_id(LIX8) name: LIX8 }
.trait { kind: method method: .function_id(LI16) name: LI16 }
.trait { kind: method method: .function_id(LIX16) name: LIX16}
.trait { kind: method method: .function_id(LI32) name: LI32 }
.trait { kind: method method: .function_id(LF32) name: LF32 }
.trait { kind: method method: .function_id(LF64) name: LF64 }
.trait { kind: method method: .function_id(SI8) name: SI8 }
.trait { kind: method method: .function_id(SI16) name: SI16 }
.trait { kind: method method: .function_id(SI32) name: SI32 }
.trait { kind: method method: .function_id(SF32) name: SF32 }
.trait { kind: method method: .function_id(SF64) name: SF64 }
.trait { kind: method method: .function_id(SXI1) name: SXI1 }
.trait { kind: method method: .function_id(SXI8) name: SXI8 }
.trait { kind: method method: .function_id(SXI16) name: SXI16 }
.trait { kind: method method: .function_id(NEXTNAME) name: NEXTNAME }
.trait { kind: method method: .function_id(NEXTVALUE) name: NEXTVALUE }
.trait { kind: method method: .function_id(HASNEXT) name: HASNEXT }
.trait { kind: method method: .function_id(CHECKFILTER) name: CHECKFILTER }
.trait { kind: method method: .function_id(ESC_XELEM) name: ESC_XELEM }
.trait { kind: method method: .function_id(ESC_XATTR) name: ESC_XATTR }
.trait { kind: method method: .function_id(CONVERT_S) name: CONVERT_S }
.trait { kind: method method: .function_id(CONVERT_I) name: CONVERT_I }
.trait { kind: method method: .function_id(CONVERT_U) name: CONVERT_U }
.trait { kind: method method: .function_id(CONVERT_D) name: CONVERT_D }
.trait { kind: method method: .function_id(CONVERT_B) name: CONVERT_B }
.trait { kind: method method: .function_id(CONVERT_O) name: CONVERT_O }
.trait { kind: method method: .function_id(COERCE_B) name: COERCE_B }
.trait { kind: method method: .function_id(COERCE_A) name: COERCE_A }
.trait { kind: method method: .function_id(COERCE_I) name: COERCE_I }
.trait { kind: method method: .function_id(COERCE_D) name: COERCE_D }
.trait { kind: method method: .function_id(COERCE_S) name: COERCE_S }
.trait { kind: method method: .function_id(COERCE_U) name: COERCE_U }
.trait { kind: method method: .function_id(COERCE_O) name: COERCE_O }
.trait { kind: method method: .function_id(ASTYPELATE) name: ASTYPELATE }
.trait { kind: method method: .function_id(ISTYPELATE) name: ISTYPELATE }
.trait { kind: method method: .function_id(INSTANCEOF) name: INSTANCEOF }
.trait { kind: method method: .function_id(IN) name: IN }
.trait { kind: method method: .function_id(NEGATE) name: NEGATE }
.trait { kind: method method: .function_id(INCREMENT) name: INCREMENT }
.trait { kind: method method: .function_id(DECREMENT) name: DECREMENT }
.trait { kind: method method: .function_id(TYPEOF) name: TYPEOF }
.trait { kind: method method: .function_id(NOT) name: NOT }
.trait { kind: method method: .function_id(BITNOT) name: BITNOT }
.trait { kind: method method: .function_id(INCREMENT_I) name: INCREMENT_I }
.trait { kind: method method: .function_id(DECREMENT_I) name: DECREMENT_I }
.trait { kind: method method: .function_id(NEGATE_I) name: NEGATE_I }
.trait { kind: method method: .function_id(ADD) name: ADD }
.trait { kind: method method: .function_id(SUBTRACT) name: SUBTRACT }
.trait { kind: method method: .function_id(MULTIPLY) name: MULTIPLY }
.trait { kind: method method: .function_id(DIVIDE) name: DIVIDE }
.trait { kind: method method: .function_id(MODULO) name: MODULO }
.trait { kind: method method: .function_id(LSHIFT) name: LSHIFT }
.trait { kind: method method: .function_id(RSHIFT) name: RSHIFT }
.trait { kind: method method: .function_id(URSHIFT) name: URSHIFT }
.trait { kind: method method: .function_id(BITAND) name: BITAND }
.trait { kind: method method: .function_id(BITOR) name: BITOR }
.trait { kind: method method: .function_id(BITXOR) name: BITXOR }
.trait { kind: method method: .function_id(EQUALS) name: EQUALS }
.trait { kind: method method: .function_id(STRICTEQUALS) name: STRICTEQUALS }
.trait { kind: method method: .function_id(LESSTHAN) name: LESSTHAN }
.trait { kind: method method: .function_id(LESSEQUALS) name: LESSEQUALS }
.trait { kind: method method: .function_id(GREATERTHAN) name: GREATERTHAN }
.trait { kind: method method: .function_id(GREATEREQUALS) name: GREATEREQUALS }
.trait { kind: method method: .function_id(ADD_I) name: ADD_I }
.trait { kind: method method: .function_id(SUBTRACT_I) name: SUBTRACT_I }
.trait { kind: method method: .function_id(MULTIPLY_I) name: MULTIPLY_I }
}
}

View File

@ -0,0 +1,48 @@
These tests are built with ASC with something like:
```
asc
-import playerglobal.abc
-in ../lib/print.as
-in ../lib/com/adobe/test/Assert.as
-in ../lib/com/adobe/test/Utils.as
lf32/Test.as
```
Then combine the resulting `asc` file with `generated/intrinsics.asc` and stuff them both into a swf.
Example code:
```rust
let mut swf = vec![];
swf::write::write_swf(
&swf::Header {
compression: swf::Compression::None,
version: 30,
stage_size: swf::Rectangle {
x_min: swf::Twips::ZERO,
x_max: swf::Twips::from_pixels(100.0),
y_min: swf::Twips::ZERO,
y_max: swf::Twips::from_pixels(100.0),
},
frame_rate: swf::Fixed8::ONE,
num_frames: 1,
},
&[
swf::Tag::FileAttributes(swf::FileAttributes::IS_ACTION_SCRIPT_3),
swf::Tag::DoAbc(swf::DoAbc {
name: SwfStr::from_utf8_str("intrinsics"),
is_lazy_initialize: false,
data: intrinsics_abc,
}),
swf::Tag::DoAbc(swf::DoAbc {
name: SwfStr::from_utf8_str(name),
is_lazy_initialize: false,
data: test_abc,
}),
swf::Tag::ShowFrame,
],
&mut swf,
)?;
write(testdir.join("test.swf"), swf)?;
```

View File

@ -0,0 +1,206 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION:String = "mops";
// var VERSION:String = "AS3";
// var TITLE:String = "lf32";
Assert.expectError("lf32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ LF32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
Assert.expectError("lf32(-1)", Utils.RANGEERROR+1506, function(){ LF32(-1); });
Assert.expectError("lf32(mem.length)", Utils.RANGEERROR+1506, function(){ LF32(mem.length); });
Assert.expectError("lf32(mem.length-1)", Utils.RANGEERROR+1506, function(){ LF32(mem.length-1); });
Assert.expectError("lf32(mem.length-2)", Utils.RANGEERROR+1506, function(){ LF32(mem.length-2); });
Assert.expectError("lf32(mem.length-3)", Utils.RANGEERROR+1506, function(){ LF32(mem.length-3); });
Assert.expectEq("lf32(mem.length-4)", 0, LF32(mem.length-4));
SI32(0x41460200, 1); // 0x41460200 == 12.37548828125
Assert.expectEq("lf32(1) loads do not need to be aligned", 12.37548828125, LF32(1));
testsi8();
testsi16();
testsi32();
testsf32();
testsf64();
testwriteByte();
testwriteBoolean();
testwriteInt();
testwriteFloat();
testwriteDouble();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testsi8():void
{
/**
* 0x41460200 = 01000001 01000110 00000010 00000000
* 12.37548828125
*/
clearMemory();
SI8(0x00, 0);
SI8(0x02, 1);
SI8(0x46, 2);
SI8(0x41, 3);
Assert.expectEq("lf32 load float written by si8()", 12.37548828125, LF32(0));
}
function testsi16():void
{
/**
* 0x41460200 = 01000001 01000110 00000010 00000000
* 12.37548828125
*/
clearMemory();
SI16(0x0200, 0);
SI16(0x4146, 2);
Assert.expectEq("lf32 load float written by si16()", 12.37548828125, LF32(0));
}
function testsi32():void
{
clearMemory();
SI32(0x41460200, 0);
Assert.expectEq("lf32 load float written by si32(0x41460200)", 12.37548828125, LF32(0));
}
function testsf32():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
// Can't use hex representation here since asc will just treat it
// as an int|Number and not as a float.
clearMemory();
SF32(12.37548828125, 0);
Assert.expectEq("lf32 load float written by sf32(12.37548828125)", 12.37548828125, LF32(0));
}
function testsf64():void
{
/******************************************
* 2.8846085099489688873291015625E6
* 0x4146020041460200
* sign = 0
* exponent = 10000010100
* mantissa = 0110000000100000000001000001010001100000001000000000
*****************************************/
clearMemory();
SF64(2.8846085099489688873291015625E6, 0);
Assert.expectEq("lf32 load 1st float written by sf64(0x4146020041460200)", 12.37548828125, LF32(4));
Assert.expectEq("lf32 load 2nd float written by sf64(0x4146020041460200)", 12.37548828125, LF32(0));
}
function testwriteByte():void
{
clearMemory();
mem.position = 0;
mem.writeByte(0x00);
mem.writeByte(0x02);
mem.writeByte(0x46);
mem.writeByte(0x41);
Assert.expectEq("lf32 load float written by writeByte()", 12.37548828125, LF32(0));
}
function testwriteBoolean():void
{
clearMemory();
mem.position = 0;
mem.writeBoolean(true);
mem.writeBoolean(false);
mem.writeBoolean(false);
mem.writeBoolean(true);
Assert.expectEq("lf32 load float written by writeBoolean()", 2.3510604481259484465715043694E-38, LF32(0));
}
function testwriteInt():void
{
/******************************************
* 1095107072 = 0x41460200
*****************************************/
clearMemory();
mem.position = 0;
mem.writeInt(1095107072);
Assert.expectEq("lf32 load float written by writeInt(2147473647)", 12.37548828125, LF32(0));
}
function testwriteFloat():void
{
/******************************************
* 12.375f
*****************************************/
clearMemory();
mem.position = 0;
mem.writeFloat(12.375);
Assert.expectEq("lf32 load float written by writeFloat(12.375)", 12.375, LF32(0));
}
function testwriteDouble():void
{
/******************************************
* 2.8846085099489688873291015625E6
* 0x4146020041460200
* sign = 0
* exponent = 10000010100
* mantissa = 0110000000100000000001000001010001100000001000000000
*****************************************/
clearMemory();
mem.position = 0;
mem.writeDouble(2.8846085099489688873291015625E6);
Assert.expectEq("lf32 load 1st float written by writeDouble(2.8846085099489688873291015625E6)", 12.37548828125, LF32(4));
Assert.expectEq("lf32 load 2nd float written by writeDouble(2.8846085099489688873291015625E6)", 12.37548828125, LF32(0));
}
}

View File

@ -0,0 +1,20 @@
lf32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
lf32(-1) PASSED!
lf32(mem.length) PASSED!
lf32(mem.length-1) PASSED!
lf32(mem.length-2) PASSED!
lf32(mem.length-3) PASSED!
lf32(mem.length-4) PASSED!
lf32(1) loads do not need to be aligned PASSED!
lf32 load float written by si8() PASSED!
lf32 load float written by si16() PASSED!
lf32 load float written by si32(0x41460200) PASSED!
lf32 load float written by sf32(12.37548828125) PASSED!
lf32 load 1st float written by sf64(0x4146020041460200) PASSED!
lf32 load 2nd float written by sf64(0x4146020041460200) PASSED!
lf32 load float written by writeByte() PASSED!
lf32 load float written by writeBoolean() PASSED!
lf32 load float written by writeInt(2147473647) PASSED!
lf32 load float written by writeFloat(12.375) PASSED!
lf32 load 1st float written by writeDouble(2.8846085099489688873291015625E6) PASSED!
lf32 load 2nd float written by writeDouble(2.8846085099489688873291015625E6) PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,196 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION:String = "mops";
// var VERSION:String = "AS3";
// var TITLE:String = "lf64";
Assert.expectError("lf64(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ LF64(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
Assert.expectError("lf64(-1)", Utils.RANGEERROR+1506, function(){ LF64(-1); });
Assert.expectError("lf64(mem.length)", Utils.RANGEERROR+1506, function(){ LF64(mem.length); });
Assert.expectError("lf64(mem.length-1)", Utils.RANGEERROR+1506, function(){ LF64(mem.length-1); });
Assert.expectError("lf64(mem.length-2)", Utils.RANGEERROR+1506, function(){ LF64(mem.length-2); });
Assert.expectError("lf64(mem.length-3)", Utils.RANGEERROR+1506, function(){ LF64(mem.length-3); });
Assert.expectError("lf64(mem.length-4)", Utils.RANGEERROR+1506, function(){ LF64(mem.length-4); });
Assert.expectError("lf64(mem.length-5)", Utils.RANGEERROR+1506, function(){ LF64(mem.length-5); });
Assert.expectError("lf64(mem.length-6)", Utils.RANGEERROR+1506, function(){ LF64(mem.length-6); });
Assert.expectError("lf64(mem.length-7)", Utils.RANGEERROR+1506, function(){ LF64(mem.length-7); });
Assert.expectEq("lf64(mem.length-8)", 0, LF64(mem.length-8));
SI32(0x4237D796, 5); // 0x4237D796EFC00000 == 102401241024
SI32(0xEFC00000, 1); // 0x4237D796EFC00000 == 102401241024
Assert.expectEq("lf64(1) loads do not need to be aligned", 102401241024, LF64(1));
testsi8();
testsi16();
testsi32();
testsf32();
testsf64();
testwriteByte();
//testwriteBoolean();
testwriteInt();
testwriteFloat();
testwriteDouble();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testsi8():void
{
/**
* 0x4237D796EFC00000 = 102401241024
*/
clearMemory();
SI8(0x00, 0);
SI8(0x00, 1);
SI8(0xC0, 2);
SI8(0xEF, 3);
SI8(0x96, 4);
SI8(0xD7, 5);
SI8(0x37, 6);
SI8(0x42, 7);
Assert.expectEq("lf64 load double written by si8()", 102401241024, LF64(0));
}
function testsi16():void
{
/**
* 0x4237D796EFC00000 = 102401241024
*/
clearMemory();
SI16(0x0000, 0);
SI16(0xEFC0, 2);
SI16(0xD796, 4);
SI16(0x4237, 6);
Assert.expectEq("lf64 load double written by si16()", 102401241024, LF64(0));
}
function testsi32():void
{
/**
* 0x4237D796EFC00000 = 102401241024
*/
clearMemory();
SI32(0xEFC00000, 0);
SI32(0x4237D796, 4);
Assert.expectEq("lf64 load double written by si32()", 102401241024, LF64(0));
}
function testsf32():void
{
// Can't use hex representation here since asc will just treat it
// as an int|Number and not as a float.
clearMemory();
SF32(12.37548828125, 0);
SF32(12.37548828125, 4);
Assert.expectEq("lf64 load double written by sf32()", 2884608.5099489688873291015625, LF64(0));
}
function testsf64():void
{
clearMemory();
SF64(102401241024, 0);
Assert.expectEq("lflf load double written by sf64(102401241024)", 102401241024, LF64(0));
}
function testwriteByte():void
{
/**
* 0x4237D796EFC00000 = 102401241024
*/
clearMemory();
mem.position = 0;
mem.writeByte(0x00);
mem.writeByte(0x00);
mem.writeByte(0xC0);
mem.writeByte(0xEF);
mem.writeByte(0x96);
mem.writeByte(0xD7);
mem.writeByte(0x37);
mem.writeByte(0x42);
Assert.expectEq("lf64 load double written by writeByte()", 102401241024, LF64(0));
}
function testwriteBoolean():void
{
clearMemory();
mem.position = 0;
mem.writeBoolean(true);
mem.writeBoolean(false);
mem.writeBoolean(false);
mem.writeBoolean(true);
Assert.expectEq("lf32 load float written by writeBoolean()", 2.3510604481259484465715043694E-38, LF32(0));
}
function testwriteInt():void
{
/******************************************
* 0x4237D796EFC00000 = 102401241024
*****************************************/
clearMemory();
mem.position = 0;
mem.writeInt(-272629760); // 0xEFC00000
mem.writeInt(1110955926); // 0x4237D796
Assert.expectEq("lf64 load double written by writeInt()", 102401241024, LF64(0));
}
function testwriteFloat():void
{
clearMemory();
mem.position = 0;
mem.writeFloat(12.37548828125);
mem.writeFloat(12.37548828125);
Assert.expectEq("lf64 load double written by writeFloat(12.37548828125)", 2884608.5099489688873291015625, LF64(0));
}
function testwriteDouble():void
{
clearMemory();
mem.position = 0;
mem.writeDouble(102401241024);
Assert.expectEq("lf64 load double written by writeDouble(102401241024)", 102401241024, LF64(0));
}
}

View File

@ -0,0 +1,21 @@
lf64(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
lf64(-1) PASSED!
lf64(mem.length) PASSED!
lf64(mem.length-1) PASSED!
lf64(mem.length-2) PASSED!
lf64(mem.length-3) PASSED!
lf64(mem.length-4) PASSED!
lf64(mem.length-5) PASSED!
lf64(mem.length-6) PASSED!
lf64(mem.length-7) PASSED!
lf64(mem.length-8) PASSED!
lf64(1) loads do not need to be aligned PASSED!
lf64 load double written by si8() PASSED!
lf64 load double written by si16() PASSED!
lf64 load double written by si32() PASSED!
lf64 load double written by sf32() PASSED!
lflf load double written by sf64(102401241024) PASSED!
lf64 load double written by writeByte() PASSED!
lf64 load double written by writeInt() PASSED!
lf64 load double written by writeFloat(12.37548828125) PASSED!
lf64 load double written by writeDouble(102401241024) PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,215 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION:String = "mops";
// var VERSION:String = "AS3";
// var TITLE:String = "li16";
Assert.expectError("li16(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ LI16(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
Assert.expectError("li16(-1)", Utils.RANGEERROR+1506, function(){ LI16(-1); });
Assert.expectError("li16(mem.length)", Utils.RANGEERROR+1506, function(){ LI16(mem.length); });
Assert.expectError("li16(mem.length-1)", Utils.RANGEERROR+1506, function(){ LI16(mem.length-1); });
Assert.expectEq("li16(mem.length-2)", 0, LI16(mem.length-2));
SI16(0x7FDE, 1);
Assert.expectEq("li16(1) loads do not need to be aligned", 0x7FDE, LI16(1));
testsi8();
testsi16();
testsi32();
testsf32();
testsf64();
testwriteByte();
testwriteBoolean();
testwriteInt();
testwriteFloat();
testwriteDouble();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testsi8():void
{
clearMemory();
SI8(0x7F, 0);
SI8(0x80, 1);
Assert.expectEq("li16 load short written by si8()", 0x807F, LI16(0));
}
function testsi16():void
{
clearMemory();
SI16(0x80DE, 0);
Assert.expectEq("li16 load short written by si16(0x80DE)", 0x80DE, LI16(0));
}
function testsi32():void
{
clearMemory();
SI32(0x80DE32F1, 0);
Assert.expectEq("li16 load 1st short written by si32(0x80DE32F1)", 0x80DE, LI16(2));
Assert.expectEq("li16 load 2nd short written by si32(0x80DE32F1)", 0x32F1, LI16(0));
}
function testsf32():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
SF32(12.375, 0);
Assert.expectEq("li16 load 1st short written by sf32(12.375)", 0x4146, LI16(2));
Assert.expectEq("li16 load 2nd short written by sf32(12.375)", 0x0000, LI16(0));
}
function testsf64():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
SF64(1.0241024102410242048E19, 0);
Assert.expectEq("li16 load 1st short written by sf64(10241024102410241024)", 0x43E1, LI16(6));
Assert.expectEq("li16 load 2nd short written by sf64(10241024102410241024)", 0xC3ED, LI16(4));
Assert.expectEq("li16 load 3rd short written by sf64(10241024102410241024)", 0xA52E, LI16(2));
Assert.expectEq("li16 load 4th short written by sf64(10241024102410241024)", 0x0C09, LI16(0));
}
function testwriteByte():void
{
clearMemory();
mem.position = 0;
mem.writeByte(127);
mem.writeByte(128);
Assert.expectEq("li16 load short written by writeByte()", 0x807F, LI16(0));
}
function testwriteBoolean():void
{
clearMemory();
mem.position = 0;
mem.writeBoolean(false);
mem.writeBoolean(true);
Assert.expectEq("li16 load short written by writeBoolean()", 0x0100, LI16(0));
}
function testwriteInt():void
{
/******************************************
* 2147473647 = 0x7FFFD8EF = 01111111 11111111 11011000 11101111
* 01111111 = 127 = 0x7F
* 11111111 = 255 = 0xFF
* 11011000 = 216 = 0xD8
* 11101111 = 239 = 0xEF
*****************************************/
clearMemory();
mem.position = 0;
mem.writeInt(2147473647);
Assert.expectEq("li16 load 1st short written by writeInt(2147473647)", 0x7FFF, LI16(2));
Assert.expectEq("li16 load 2nd short written by writeInt(2147473647)", 0xD8EF, LI16(0));
}
function testwriteFloat():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
mem.position = 0;
mem.writeFloat(12.375);
Assert.expectEq("li16 load 1st short written by writeFloat(12.375)", 0x4146, LI16(2));
Assert.expectEq("li16 load 2nd short written by writeFloat(12.375)", 0x0000, LI16(0));
}
function testwriteDouble():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
mem.position = 0;
mem.writeDouble(1.0241024102410242048E19);
Assert.expectEq("li16 load 1st short written by writeDouble(1.0241024102410242048E19)", 0x43E1, LI16(6));
Assert.expectEq("li16 load 2nd short written by writeDouble(1.0241024102410242048E19)", 0xC3ED, LI16(4));
Assert.expectEq("li16 load 3rd short written by writeDouble(1.0241024102410242048E19)", 0xA52E, LI16(2));
Assert.expectEq("li16 load 4th short written by writeDouble(1.0241024102410242048E19)", 0x0C09, LI16(0));
}
}

View File

@ -0,0 +1,26 @@
li16(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
li16(-1) PASSED!
li16(mem.length) PASSED!
li16(mem.length-1) PASSED!
li16(mem.length-2) PASSED!
li16(1) loads do not need to be aligned PASSED!
li16 load short written by si8() PASSED!
li16 load short written by si16(0x80DE) PASSED!
li16 load 1st short written by si32(0x80DE32F1) PASSED!
li16 load 2nd short written by si32(0x80DE32F1) PASSED!
li16 load 1st short written by sf32(12.375) PASSED!
li16 load 2nd short written by sf32(12.375) PASSED!
li16 load 1st short written by sf64(10241024102410241024) PASSED!
li16 load 2nd short written by sf64(10241024102410241024) PASSED!
li16 load 3rd short written by sf64(10241024102410241024) PASSED!
li16 load 4th short written by sf64(10241024102410241024) PASSED!
li16 load short written by writeByte() PASSED!
li16 load short written by writeBoolean() PASSED!
li16 load 1st short written by writeInt(2147473647) PASSED!
li16 load 2nd short written by writeInt(2147473647) PASSED!
li16 load 1st short written by writeFloat(12.375) PASSED!
li16 load 2nd short written by writeFloat(12.375) PASSED!
li16 load 1st short written by writeDouble(1.0241024102410242048E19) PASSED!
li16 load 2nd short written by writeDouble(1.0241024102410242048E19) PASSED!
li16 load 3rd short written by writeDouble(1.0241024102410242048E19) PASSED!
li16 load 4th short written by writeDouble(1.0241024102410242048E19) PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,217 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION:String = "mops";
// var VERSION:String = "AS3";
// var TITLE:String = "li32";
Assert.expectError("li32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ LI32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
Assert.expectError("li32(-1)", Utils.RANGEERROR+1506, function(){ LI32(-1); });
Assert.expectError("li32(mem.length)", Utils.RANGEERROR+1506, function(){ LI32(mem.length); });
Assert.expectError("li32(mem.length-1)", Utils.RANGEERROR+1506, function(){ LI32(mem.length-1); });
Assert.expectError("li32(mem.length-2)", Utils.RANGEERROR+1506, function(){ LI32(mem.length-2); });
Assert.expectError("li32(mem.length-3)", Utils.RANGEERROR+1506, function(){ LI32(mem.length-3); });
Assert.expectEq("li32(mem.length-4)", 0, LI32(mem.length-4));
SI32(0x7FDE8001, 1);
Assert.expectEq("li32(1) loads do not need to be aligned", 0x7FDE8001, LI32(1));
testsi8();
testsi16();
testsi32();
testsf32();
testsf64();
testwriteByte();
testwriteBoolean();
testwriteInt();
testwriteFloat();
testwriteDouble();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testsi8():void
{
clearMemory();
SI8(0x7F, 0);
SI8(0x80, 1);
SI8(0x80, 2);
SI8(0x01, 3);
Assert.expectEq("li32 load int32 written by si8()", 0x0180807F, LI32(0));
}
function testsi16():void
{
clearMemory();
SI16(0x80DE, 0);
SI16(0x07A5, 2);
Assert.expectEq("li32 load int32 written by si16()", 0x07A580DE, LI32(0));
}
function testsi32():void
{
clearMemory();
SI32(0x07DE32F1, 0);
Assert.expectEq("li32 load int32 written by si32(0x07DE32F1)", 0x07DE32F1, LI32(0));
}
function testsf32():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
SF32(12.375, 0);
Assert.expectEq("li32 load int32 written by sf32(12.375)", 0x41460000, LI32(0));
}
function testsf64():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
SF64(1.0241024102410242048E19, 0);
Assert.expectEq("li32 load 1st int32 written by si64(10241024102410241024)", 0x43E1C3ED, LI32(4));
Assert.expectEq("li32 load 2nd int32 written by si64(10241024102410241024)", int(0xA52E0C09), LI32(0));
}
function testwriteByte():void
{
clearMemory();
mem.position = 0;
mem.writeByte(127);
mem.writeByte(128);
mem.writeByte(0x77);
mem.writeByte(0x5A);
Assert.expectEq("li32 load int32 written by writeByte()", 0x5A77807F, LI32(0));
}
function testwriteBoolean():void
{
clearMemory();
mem.position = 0;
mem.writeBoolean(true);
mem.writeBoolean(true);
mem.writeBoolean(false);
mem.writeBoolean(true);
Assert.expectEq("li32 load int32 written by writeBoolean()", 0x01000101, LI32(0));
}
function testwriteInt():void
{
/******************************************
* 2147473647 = 0x7FFFD8EF = 01111111 11111111 11011000 11101111
* 01111111 = 127 = 0x7F
* 11111111 = 255 = 0xFF
* 11011000 = 216 = 0xD8
* 11101111 = 239 = 0xEF
*****************************************/
clearMemory();
mem.position = 0;
mem.writeInt(2147473647);
Assert.expectEq("li32 load int32 written by writeInt(2147473647)", 0x7FFFD8EF, LI32(0));
}
function testwriteFloat():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
mem.position = 0;
mem.writeFloat(12.375);
Assert.expectEq("li32 load int32 written by writeFloat(12.375)", 0x41460000, LI32(0));
}
function testwriteDouble():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
mem.position = 0;
mem.writeDouble(1.0241024102410242048E19);
Assert.expectEq("li32 load 1st int32 written by writeDouble(1.0241024102410242048E19)", 0x43E1C3ED, LI32(4));
Assert.expectEq("li32 load 2nd int32 written by writeDouble(1.0241024102410242048E19)", int(0xA52E0C09), LI32(0));
}
}

View File

@ -0,0 +1,20 @@
li32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
li32(-1) PASSED!
li32(mem.length) PASSED!
li32(mem.length-1) PASSED!
li32(mem.length-2) PASSED!
li32(mem.length-3) PASSED!
li32(mem.length-4) PASSED!
li32(1) loads do not need to be aligned PASSED!
li32 load int32 written by si8() PASSED!
li32 load int32 written by si16() PASSED!
li32 load int32 written by si32(0x07DE32F1) PASSED!
li32 load int32 written by sf32(12.375) PASSED!
li32 load 1st int32 written by si64(10241024102410241024) PASSED!
li32 load 2nd int32 written by si64(10241024102410241024) PASSED!
li32 load int32 written by writeByte() PASSED!
li32 load int32 written by writeBoolean() PASSED!
li32 load int32 written by writeInt(2147473647) PASSED!
li32 load int32 written by writeFloat(12.375) PASSED!
li32 load 1st int32 written by writeDouble(1.0241024102410242048E19) PASSED!
li32 load 2nd int32 written by writeDouble(1.0241024102410242048E19) PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,237 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION:String = "mops";
// var VERSION:String = "AS3";
// var TITLE:String = "li8";
Assert.expectError("li8(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ LI8(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
Assert.expectError("li8(-1)", Utils.RANGEERROR+1506, function(){ LI8(-1); });
Assert.expectError("li8(mem.length)", Utils.RANGEERROR+1506, function(){ LI8(mem.length); });
Assert.expectEq("li8(mem.length-1)", 0, LI8(mem.length-1));
testsi8();
testsi16();
testsi32();
testsf32();
testsf64();
testwriteByte();
testwriteBoolean();
testwriteInt();
testwriteFloat();
testwriteDouble();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testsi8():void
{
clearMemory();
SI8(0x7F, 0);
SI8(0x80, 1);
Assert.expectEq("li8 load byte written by si8(0x7F)", 0x7F, LI8(0));
Assert.expectEq("li8 load byte written by si8(0x80)", 0x80, LI8(1));
}
function testsi16():void
{
clearMemory();
SI16(0x80DE, 0);
Assert.expectEq("li8 load 1st byte written by si16(0x80DE)", 0x80, LI8(1));
Assert.expectEq("li8 load 2nd byte written by si16(0x80De)", 0xDE, LI8(0));
}
function testsi32():void
{
clearMemory();
SI32(0x80DE32F1, 0);
Assert.expectEq("li8 load 1st byte written by si32(0x80DE32F1)", 0x80, LI8(3));
Assert.expectEq("li8 load 2nd byte written by si32(0x80DE32F1)", 0xDE, LI8(2));
Assert.expectEq("li8 load 3rd byte written by si32(0x80DE32F1)", 0x32, LI8(1));
Assert.expectEq("li8 load 4th byte written by si32(0x80DE32F1)", 0xF1, LI8(0));
}
function testsf32():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
SF32(12.375, 0);
Assert.expectEq("li8 load 1st byte written by sf32(12.375)", 0x41, LI8(3));
Assert.expectEq("li8 load 2nd byte written by sf32(12.375)", 0x46, LI8(2));
Assert.expectEq("li8 load 3rd byte written by sf32(12.375)", 0x00, LI8(1));
Assert.expectEq("li8 load 4th byte written by sf32(12.375)", 0x00, LI8(0));
}
function testsf64():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
SF64(1.0241024102410242048E19, 0);
Assert.expectEq("li8 load 1st byte written by sf64(10241024102410241024)", 0x43, LI8(7));
Assert.expectEq("li8 load 2nd byte written by sf64(10241024102410241024)", 0xE1, LI8(6));
Assert.expectEq("li8 load 3rd byte written by sf64(10241024102410241024)", 0xC3, LI8(5));
Assert.expectEq("li8 load 4th byte written by sf64(10241024102410241024)", 0xED, LI8(4));
Assert.expectEq("li8 load 5th byte written by sf64(10241024102410241024)", 0xA5, LI8(3));
Assert.expectEq("li8 load 6th byte written by sf64(10241024102410241024)", 0x2E, LI8(2));
Assert.expectEq("li8 load 7th byte written by sf64(10241024102410241024)", 0x0C, LI8(1));
Assert.expectEq("li8 load 8th byte written by sf64(10241024102410241024)", 0x09, LI8(0));
}
function testwriteByte():void
{
clearMemory();
mem.position = 0;
mem.writeByte(0);
mem.writeByte(127);
mem.writeByte(128);
mem.writeByte(255);
Assert.expectEq("li8 load byte written by writeByte(0)", 0, LI8(0));
Assert.expectEq("li8 load byte written by writeByte(127)", 127, LI8(1));
Assert.expectEq("li8 load byte written by writeByte(128)", 128, LI8(2));
Assert.expectEq("li8 load byte written by writeByte(255)", 255, LI8(3));
}
function testwriteBoolean():void
{
clearMemory();
mem.position = 0;
mem.writeBoolean(true);
mem.writeBoolean(false);
Assert.expectEq("li8 load byte written by writeBoolean(true)", 1, LI8(0));
Assert.expectEq("li8 load byte written by writeBoolean(false)", 0, LI8(1));
}
function testwriteInt():void
{
/******************************************
* 2147473647 = 0x7FFFD8EF = 01111111 11111111 11011000 11101111
* 01111111 = 127 = 0x7F
* 11111111 = 255 = 0xFF
* 11011000 = 216 = 0xD8
* 11101111 = 239 = 0xEF
*****************************************/
clearMemory();
mem.position = 0;
mem.writeInt(2147473647);
Assert.expectEq("li8 load 1st byte written by writeInt(2147473647)", 0x7F, LI8(3));
Assert.expectEq("li8 load 2nd byte written by writeInt(2147473647)", 0xFF, LI8(2));
Assert.expectEq("li8 load 3rd byte written by writeInt(2147473647)", 0xD8, LI8(1));
Assert.expectEq("li8 load 4th byte written by writeInt(2147473647)", 0xEF, LI8(0));
}
function testwriteFloat():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
mem.position = 0;
mem.writeFloat(12.375);
Assert.expectEq("li8 load 1st byte written by writeFloat(12.375)", 0x41, LI8(3));
Assert.expectEq("li8 load 2nd byte written by writeFloat(12.375)", 0x46, LI8(2));
Assert.expectEq("li8 load 3rd byte written by writeFloat(12.375)", 0x00, LI8(1));
Assert.expectEq("li8 load 4th byte written by writeFloat(12.375)", 0x00, LI8(0));
}
function testwriteDouble():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
mem.position = 0;
mem.writeDouble(1.0241024102410242048E19);
Assert.expectEq("li8 load 1st byte written by writeDouble(1.0241024102410242048E19)", 0x43, LI8(7));
Assert.expectEq("li8 load 2nd byte written by writeDouble(1.0241024102410242048E19)", 0xE1, LI8(6));
Assert.expectEq("li8 load 3rd byte written by writeDouble(1.0241024102410242048E19)", 0xC3, LI8(5));
Assert.expectEq("li8 load 4th byte written by writeDouble(1.0241024102410242048E19)", 0xED, LI8(4));
Assert.expectEq("li8 load 5th byte written by writeDouble(1.0241024102410242048E19)", 0xA5, LI8(3));
Assert.expectEq("li8 load 6th byte written by writeDouble(1.0241024102410242048E19)", 0x2E, LI8(2));
Assert.expectEq("li8 load 7th byte written by writeDouble(1.0241024102410242048E19)", 0x0C, LI8(1));
Assert.expectEq("li8 load 8th byte written by writeDouble(1.0241024102410242048E19)", 0x09, LI8(0));
}
}

View File

@ -0,0 +1,46 @@
li8(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
li8(-1) PASSED!
li8(mem.length) PASSED!
li8(mem.length-1) PASSED!
li8 load byte written by si8(0x7F) PASSED!
li8 load byte written by si8(0x80) PASSED!
li8 load 1st byte written by si16(0x80DE) PASSED!
li8 load 2nd byte written by si16(0x80De) PASSED!
li8 load 1st byte written by si32(0x80DE32F1) PASSED!
li8 load 2nd byte written by si32(0x80DE32F1) PASSED!
li8 load 3rd byte written by si32(0x80DE32F1) PASSED!
li8 load 4th byte written by si32(0x80DE32F1) PASSED!
li8 load 1st byte written by sf32(12.375) PASSED!
li8 load 2nd byte written by sf32(12.375) PASSED!
li8 load 3rd byte written by sf32(12.375) PASSED!
li8 load 4th byte written by sf32(12.375) PASSED!
li8 load 1st byte written by sf64(10241024102410241024) PASSED!
li8 load 2nd byte written by sf64(10241024102410241024) PASSED!
li8 load 3rd byte written by sf64(10241024102410241024) PASSED!
li8 load 4th byte written by sf64(10241024102410241024) PASSED!
li8 load 5th byte written by sf64(10241024102410241024) PASSED!
li8 load 6th byte written by sf64(10241024102410241024) PASSED!
li8 load 7th byte written by sf64(10241024102410241024) PASSED!
li8 load 8th byte written by sf64(10241024102410241024) PASSED!
li8 load byte written by writeByte(0) PASSED!
li8 load byte written by writeByte(127) PASSED!
li8 load byte written by writeByte(128) PASSED!
li8 load byte written by writeByte(255) PASSED!
li8 load byte written by writeBoolean(true) PASSED!
li8 load byte written by writeBoolean(false) PASSED!
li8 load 1st byte written by writeInt(2147473647) PASSED!
li8 load 2nd byte written by writeInt(2147473647) PASSED!
li8 load 3rd byte written by writeInt(2147473647) PASSED!
li8 load 4th byte written by writeInt(2147473647) PASSED!
li8 load 1st byte written by writeFloat(12.375) PASSED!
li8 load 2nd byte written by writeFloat(12.375) PASSED!
li8 load 3rd byte written by writeFloat(12.375) PASSED!
li8 load 4th byte written by writeFloat(12.375) PASSED!
li8 load 1st byte written by writeDouble(1.0241024102410242048E19) PASSED!
li8 load 2nd byte written by writeDouble(1.0241024102410242048E19) PASSED!
li8 load 3rd byte written by writeDouble(1.0241024102410242048E19) PASSED!
li8 load 4th byte written by writeDouble(1.0241024102410242048E19) PASSED!
li8 load 5th byte written by writeDouble(1.0241024102410242048E19) PASSED!
li8 load 6th byte written by writeDouble(1.0241024102410242048E19) PASSED!
li8 load 7th byte written by writeDouble(1.0241024102410242048E19) PASSED!
li8 load 8th byte written by writeDouble(1.0241024102410242048E19) PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,123 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION:String = "mops";
// var VERSION:String = "AS3";
// var TITLE:String = "lix16";
Assert.expectError("lix16(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ LIX16(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
Assert.expectError("lix16(-1)", Utils.RANGEERROR+1506, function(){ LIX16(-1); });
Assert.expectError("lix16(mem.length)", Utils.RANGEERROR+1506, function(){ LIX16(mem.length); });
Assert.expectError("lix16(mem.length-1)", Utils.RANGEERROR+1506, function(){ LIX16(mem.length-1); });
Assert.expectEq("lix16(mem.length-2)", 0, LIX16(mem.length-2));
testsi8();
testsi16();
testsi32();
testwriteByte();
testwriteInt();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testsi8():void
{
// 0x8000 -32768
// 0xFFFF -1
// 0x7FFF 32767
clearMemory();
SI8(0x00, 0);
SI8(0x80, 1);
SI8(0xFF, 2);
SI8(0xFF, 3);
SI8(0xFF, 4);
SI8(0x7F, 5);
Assert.expectEq("lix16 load byte written by si8()", -32768, LIX16(0));
Assert.expectEq("lix16 load byte written by si8()", -1, LIX16(2));
Assert.expectEq("lix16 load byte written by si8()", 32767, LIX16(4));
}
function testsi16():void
{
// 0x8000 -32768
// 0xFFFF -1
// 0x7FFF 32767
clearMemory();
SI16(0x8000, 0);
SI16(0xFFFF, 2);
SI16(0x7FFF, 4);
Assert.expectEq("lix16 load bytes written by si16(0x8000)", -32768, LIX16(0));
Assert.expectEq("lix16 load bytes written by si16(0xFFFF)", -1, LIX16(2));
Assert.expectEq("lix16 load bytes written by si16(0x7FFF)", 32767, LIX16(4));
}
function testsi32():void
{
clearMemory();
SI32(0x7FFF8000, 0);
Assert.expectEq("lix16 load 1st short written by si32(0x7FFF8000)", -32768, LIX16(0));
Assert.expectEq("lix16 load 2nd short written by si32(0x7FFF8000)", 32767, LIX16(2));
}
function testwriteByte():void
{
clearMemory();
mem.position = 0;
mem.writeByte(0x00);
mem.writeByte(0x80);
mem.writeByte(0xFF);
mem.writeByte(0x7F);
Assert.expectEq("lix16 load bytes written by writeByte()", -32768, LIX16(0));
Assert.expectEq("lix16 load bytes written by writeByte()", 32767, LIX16(2));
}
function testwriteInt():void
{
clearMemory();
mem.position = 0;
mem.writeInt(2147450880);
Assert.expectEq("lix16 load 1st short written by writeInt(2147450880)", -32768, LIX16(0));
Assert.expectEq("lix16 load 2nd short written by writeInt(2147450880)", 32767, LIX16(2));
}
}

View File

@ -0,0 +1,17 @@
lix16(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
lix16(-1) PASSED!
lix16(mem.length) PASSED!
lix16(mem.length-1) PASSED!
lix16(mem.length-2) PASSED!
lix16 load byte written by si8() PASSED!
lix16 load byte written by si8() PASSED!
lix16 load byte written by si8() PASSED!
lix16 load bytes written by si16(0x8000) PASSED!
lix16 load bytes written by si16(0xFFFF) PASSED!
lix16 load bytes written by si16(0x7FFF) PASSED!
lix16 load 1st short written by si32(0x7FFF8000) PASSED!
lix16 load 2nd short written by si32(0x7FFF8000) PASSED!
lix16 load bytes written by writeByte() PASSED!
lix16 load bytes written by writeByte() PASSED!
lix16 load 1st short written by writeInt(2147450880) PASSED!
lix16 load 2nd short written by writeInt(2147450880) PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,123 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION:String = "mops";
// var VERSION:String = "AS3";
// var TITLE:String = "lix8";
Assert.expectError("lix8(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ LIX8(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
Assert.expectError("lix8(-1)", Utils.RANGEERROR+1506, function(){ LIX8(-1); });
Assert.expectError("lix8(mem.length)", Utils.RANGEERROR+1506, function(){ LIX8(mem.length); });
Assert.expectEq("lix8(mem.length-1)", 0, LIX8(mem.length-1));
testsi8();
testsi16();
testsi32();
testwriteByte();
testwriteInt();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testsi8():void
{
clearMemory();
SI8(0x7F, 0);
SI8(0x80, 1);
SI8(0xFF, 2);
Assert.expectEq("lix8 load byte written by si8(0x7F)", 127, LIX8(0));
Assert.expectEq("lix8 load byte written by si8(0x80)", -128, LIX8(1));
Assert.expectEq("lix8 load byte written by si8(0xFF)", -1, LIX8(2));
}
function testsi16():void
{
clearMemory();
SI16(0x7F80, 0);
Assert.expectEq("lix8 load 1st byte written by si16(0x7F80)", 127, LIX8(1));
Assert.expectEq("lix8 load 2nd byte written by si16(0x7F80)", -128, LIX8(0));
}
function testsi32():void
{
clearMemory();
SI32(0x007F80FF, 0);
Assert.expectEq("lix8 load 1st byte written by si32(0x007F80FF)", 0, LIX8(3));
Assert.expectEq("lix8 load 2nd byte written by si32(0x007F80FF)", 127, LIX8(2));
Assert.expectEq("lix8 load 3rd byte written by si32(0x007F80FF)", -128, LIX8(1));
Assert.expectEq("lix8 load 4th byte written by si32(0x007F80FF)", -1, LIX8(0));
}
function testwriteByte():void
{
clearMemory();
mem.position = 0;
mem.writeByte(0);
mem.writeByte(127);
mem.writeByte(128);
mem.writeByte(255);
Assert.expectEq("lix8 load byte written by writeByte(0)", 0, LIX8(0));
Assert.expectEq("lix8 load byte written by writeByte(127)", 127, LIX8(1));
Assert.expectEq("lix8 load byte written by writeByte(128)", -128, LIX8(2));
Assert.expectEq("lix8 load byte written by writeByte(255)", -1, LIX8(3));
}
function testwriteInt():void
{
/******************************************
* 2147473647 = 0x7FFFD8EF = 01111111 11111111 11011000 11101111
* 01111111 = 127 = 0x7F
* 11111111 = 255 = 0xFF
* 11011000 = 216 = 0xD8
* 11101111 = 239 = 0xEF
*****************************************/
clearMemory();
mem.position = 0;
mem.writeInt(2147473647);
Assert.expectEq("lix8 load 1st byte written by writeInt(2147473647)", 127, LIX8(3));
Assert.expectEq("lix8 load 2nd byte written by writeInt(2147473647)", -1, LIX8(2));
Assert.expectEq("lix8 load 3rd byte written by writeInt(2147473647)", -40, LIX8(1));
Assert.expectEq("lix8 load 4th byte written by writeInt(2147473647)", -17, LIX8(0));
}
}

View File

@ -0,0 +1,21 @@
lix8(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
lix8(-1) PASSED!
lix8(mem.length) PASSED!
lix8(mem.length-1) PASSED!
lix8 load byte written by si8(0x7F) PASSED!
lix8 load byte written by si8(0x80) PASSED!
lix8 load byte written by si8(0xFF) PASSED!
lix8 load 1st byte written by si16(0x7F80) PASSED!
lix8 load 2nd byte written by si16(0x7F80) PASSED!
lix8 load 1st byte written by si32(0x007F80FF) PASSED!
lix8 load 2nd byte written by si32(0x007F80FF) PASSED!
lix8 load 3rd byte written by si32(0x007F80FF) PASSED!
lix8 load 4th byte written by si32(0x007F80FF) PASSED!
lix8 load byte written by writeByte(0) PASSED!
lix8 load byte written by writeByte(127) PASSED!
lix8 load byte written by writeByte(128) PASSED!
lix8 load byte written by writeByte(255) PASSED!
lix8 load 1st byte written by writeInt(2147473647) PASSED!
lix8 load 2nd byte written by writeInt(2147473647) PASSED!
lix8 load 3rd byte written by writeInt(2147473647) PASSED!
lix8 load 4th byte written by writeInt(2147473647) PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,712 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
// var SECTION:String = "Actionscript";
// var VERSION:String = "AS3";
// var TITLE:String = "Memory Opcodes";
var inPlayer:Boolean = false;
function getApplicationDomainClass():Class
{
var ns:Namespace;
try
{
ns = new Namespace("avmplus");
return ns::["ApplicationDomain"];
}
catch(e:*) {}
try
{
ns = new Namespace("flash.system");
var result:Class = ns::["ApplicationDomain"];
inPlayer = true;
return result;
}
catch(e:*) {}
return null;
}
function getByteArrayClass():Class
{
var ns:Namespace = new Namespace("flash.utils");
try
{
return (ns::["ByteArray"]);
}
catch(e:*) {}
return null;
}
var domainClass:Class = getApplicationDomainClass();
Assert.expectEq("domainClass != null", true, domainClass != null);
var byteArrayClass:Class = getByteArrayClass();
Assert.expectEq("byteArrayClass != null", true, byteArrayClass != null);
var currentDomain:Object = domainClass.currentDomain;
Assert.expectEq("currentDomain != null", true, currentDomain != null);
var minMemSize:uint = domainClass.MIN_DOMAIN_MEMORY_LENGTH;
Assert.expectEq("minMemSize >= 8", true, minMemSize >= 8);
Assert.expectEq("currentDomain.domainMemory == null", true, currentDomain.domainMemory == null);
var ba:Object;
var emptyByteArrayOk:Boolean = false;
ba = new byteArrayClass();
try
{
currentDomain.domainMemory = ba;
emptyByteArrayOk = true;
}
catch(e:*) {}
Assert.expectEq("Empty byte array ok", false, emptyByteArrayOk);
var smallByteArrayOk:Boolean = false;
ba = new byteArrayClass();
ba.length = domainClass.MIN_DOMAIN_MEMORY_LENGTH - 1;
try
{
currentDomain.domainMemory = ba;
smallByteArrayOk = true;
}
catch(e:*) {}
Assert.expectEq("Small byte array ok", false, smallByteArrayOk);
var wrongObj1Ok:Boolean = false;
try
{
currentDomain.domainMemory = [];
wrongObj1Ok = true;
}
catch(e:*) {}
Assert.expectEq("Wrong obj (Array) ok", false, wrongObj1Ok);
var wrongObj2Ok:Boolean = false;
try
{
currentDomain.domainMemory = {};
wrongObj2Ok = true;
}
catch(e:*) {}
Assert.expectEq("Wrong obj (Object) ok", false, wrongObj2Ok);
var wrongObj3Ok:Boolean = false;
try
{
currentDomain.domainMemory = function(i:int):int { return i; };
wrongObj3Ok = true;
}
catch(e:*) {}
Assert.expectEq("Wrong obj (Function) ok", false, wrongObj3Ok);
var wrongObj4Ok:Boolean = false;
class UserClass1
{
};
try
{
currentDomain.domainMemory = new UserClass1;
wrongObj4Ok = true;
}
catch(e:*) {}
Assert.expectEq("Wrong obj (user) ok", false, wrongObj4Ok);
var minSizedByteArrayOk:Boolean = false;
ba = new byteArrayClass();
ba.length = domainClass.MIN_DOMAIN_MEMORY_LENGTH;
try
{
currentDomain.domainMemory = ba;
minSizedByteArrayOk = true;
}
catch(e:*) {}
Assert.expectEq("Min sized byte array ok", true, minSizedByteArrayOk);
var longTests:Array = [];
function readTest(salt:Number, size:int, baWrite:Function, baRead:Function, op:Function)
{
currentDomain.domainMemory.endian = "littleEndian";
var len:uint = currentDomain.domainMemory.length - size;
var n:int;
var e:Array = [];
for(var offs:int = 0; offs < size; offs++)
{
for(n = offs; n <= len; n += size)
{
currentDomain.domainMemory.position = n;
baWrite(n+salt);
currentDomain.domainMemory.position = n;
e[n] = baRead();
}
for(n = offs; n <= len; n += size)
{
if(op(n) != e[n])
return false;
}
}
return true;
}
function readTestByte(salt:int):Boolean
{
return readTest(salt, 1,
currentDomain.domainMemory.writeByte,
currentDomain.domainMemory.readUnsignedByte,
function(addr:int):int { return LI8(addr); }
);
}
function readTestByteSX(salt:int):Boolean
{
return readTest(salt, 1,
currentDomain.domainMemory.writeByte,
currentDomain.domainMemory.readByte,
function(addr:int):int { return LIX8(addr); }
);
}
function readTestShort(salt:int):Boolean
{
return readTest(salt, 2,
currentDomain.domainMemory.writeShort,
currentDomain.domainMemory.readUnsignedShort,
function(addr:int):int { return LI16(addr); }
);
}
function readTestShortSX(salt:int):Boolean
{
return readTest(salt, 2,
currentDomain.domainMemory.writeShort,
currentDomain.domainMemory.readShort,
function(addr:int):int { return LIX16(addr); }
);
}
function readTestInt(salt:int):Boolean
{
return readTest(salt, 4,
currentDomain.domainMemory.writeInt,
currentDomain.domainMemory.readInt,
function(addr:int):int { return LI32(addr); }
);
}
function readTestFloat(salt:Number):Boolean
{
return readTest(salt, 4,
currentDomain.domainMemory.writeFloat,
currentDomain.domainMemory.readFloat,
function(addr:int):Number { return LF32(addr); }
);
}
function readTestDouble(salt:Number):Boolean
{
return readTest(salt, 8,
currentDomain.domainMemory.writeDouble,
currentDomain.domainMemory.readDouble,
function(addr:int):Number { return LF64(addr); }
);
}
longTests.push(function():void {
Assert.expectEq("Read test byte w/ min sized", true, readTestByte(12));
Assert.expectEq("Read test byte w/ sign extend w/ min sized", true, readTestByteSX(-21));
Assert.expectEq("Read test short w/ min sized", true, readTestShort(3456));
Assert.expectEq("Read test short w/ sign extend w/ min sized", true, readTestShortSX(-6543));
Assert.expectEq("Read test int w/ min sized", true, readTestInt(567890));
Assert.expectEq("Read test float w/ min sized", true, readTestFloat(12.34));
Assert.expectEq("Read test double w/ min sized", true, readTestDouble(34.56));
});
function writeTest(salt:Number, size:int, test:Function, baRead:Function, op:Function):Boolean
{
currentDomain.domainMemory.endian = "littleEndian";
var len:uint = currentDomain.domainMemory.length - size;
var n:int;
var v:*;
for(var offs:int = 0; offs < size; offs++)
{
for(n = offs; n <= len; n += size)
{
op(n+salt, n);
}
for(n = offs; n <= len; n += size)
{
currentDomain.domainMemory.position = n;
if(!test(baRead(), n+salt))
return false;
}
}
return true;
}
function writeTestByte(salt:int):Boolean
{
return writeTest(salt, 1,
function(a:int, b:int):Boolean { return (a&0xff) == (b&0xff); },
currentDomain.domainMemory.readUnsignedByte,
function(v:int, n:int):void { SI8(v, n); }
);
}
function writeTestShort(salt:int):Boolean
{
return writeTest(salt, 2,
function(a:int, b:int):Boolean { return (a&0xffff) == (b&0xffff); },
currentDomain.domainMemory.readUnsignedShort,
function(v:int, n:int):void { SI16(v, n); }
);
}
function writeTestInt(salt:int):Boolean
{
return writeTest(salt, 4,
function(a:int, b:int):Boolean { return a == b; },
currentDomain.domainMemory.readInt,
function(v:int, n:int):void { SI32(v, n); }
);
}
function writeTestFloat(salt:Number):Boolean
{
return writeTest(salt, 4,
function(a:Number, b:Number):Boolean { return Math.abs(a-b)<0.0001; },
currentDomain.domainMemory.readFloat,
function(v:Number, n:int):void { SF32(v, n); }
);
}
function writeTestDouble(salt:Number):Boolean
{
return writeTest(salt, 8,
function(a:Number, b:Number):Boolean { return Math.abs(a-b)<0.0001; },
currentDomain.domainMemory.readDouble,
function(v:Number, n:int):void { SF64(v, n); }
);
}
longTests.push(function():void {
Assert.expectEq("Write test byte w/ min sized", true, writeTestByte(12));
Assert.expectEq("Write test short w/ min sized", true, writeTestShort(3456));
Assert.expectEq("Write test int w/ min sized", true, writeTestInt(567890));
Assert.expectEq("Write test float w/ min sized", true, writeTestFloat(12.34));
Assert.expectEq("Write test double w/ min sized", true, writeTestDouble(34.56));
});
function writeBytes(salt:int):void
{
var len:uint = currentDomain.domainMemory ? currentDomain.domainMemory.length :
domainClass.MIN_DOMAIN_MEMORY_LENGTH;
var n:int;
var v:int;
// byte test
for(n = 0; n < len; n += 1)
{
v = (n + salt) & 0xff;
SI8(v, n);
}
}
function verifyBytes(salt:int):Boolean
{
var len:uint = currentDomain.domainMemory ? currentDomain.domainMemory.length :
domainClass.MIN_DOMAIN_MEMORY_LENGTH;
var n:int;
var v:int;
// byte test
for(n = 0; n < len; n += 1)
{
v = (n + salt) & 0xff;
if(LI8(n) != v)
return false;
}
return true;
}
longTests.push(function():void {
writeBytes(12);
Assert.expectEq("Write min / verify min", true, verifyBytes(12));
});
longTests.push(function():void {
ba = currentDomain.domainMemory;
currentDomain.domainMemory = null;
Assert.expectEq("Write min / verify scratch", false, verifyBytes(12));
});
longTests.push(function():void {
writeBytes(34);
Assert.expectEq("Write scratch / verify scratch", true, verifyBytes(34));
});
longTests.push(function():void {
currentDomain.domainMemory = ba;
Assert.expectEq("Write scratch / verify min", false, verifyBytes(34));
});
function rangeTest(size:int, f:Function):Boolean
{
var len:uint = currentDomain.domainMemory ? currentDomain.domainMemory.length :
domainClass.MIN_DOMAIN_MEMORY_LENGTH;
var n:int;
var v:int;
var fails:Array = [];
for(n = -10000; n < len + 10000; n += 1)
{
try
{
f(n);
}
catch(e:*)
{
fails.push(n);
}
}
if(fails.length == 20000 + size - 1)
{
for(n = 0; n < 10000; n++)
if(fails[n] != -10000 + n)
return false;
for(n = 0; n < 10000 + size - 1; n++)
if(fails[n + 10000] != len + n - (size - 1))
{
print("fails[n + 10000]: " + fails[n + 10000]);
print("len:" + len);
print("size:" + size);
print("n:" + n);
return false;
}
return true;
}
return false;
}
function rangeReadTestByte():Boolean
{
return rangeTest(1, function(n:int):void { LI8(n); } );
}
function rangeOffsReadTestByte():Boolean
{
return rangeTest(1, function(n:int):void { var k:int = n - 4; LI8(ADD_I(k, 4)); }) &&
rangeTest(1, function(n:int):void { var k:int = n + 4; LI8(SUBTRACT_I(k, 4)); }) &&
rangeTest(1, function(n:int):void { var k:int = n + 4; LI8(ADD_I(k, -4)); }) &&
rangeTest(1, function(n:int):void { var k:int = n - 4; LI8(SUBTRACT_I(k, -4)); });
}
function rangeReadTestShort():Boolean
{
return rangeTest(2, function(n:int):void { LI16(n); } );
}
function rangeOffsReadTestShort():Boolean
{
return rangeTest(2, function(n:int):void { var k:int = n - 4; LI16(ADD_I(k, 4)); }) &&
rangeTest(2, function(n:int):void { var k:int = n + 4; LI16(SUBTRACT_I(k, 4)); }) &&
rangeTest(2, function(n:int):void { var k:int = n + 4; LI16(ADD_I(k, -4)); }) &&
rangeTest(2, function(n:int):void { var k:int = n - 4; LI16(SUBTRACT_I(k, -4)); });
}
function rangeReadTestInt():Boolean
{
return rangeTest(4, function(n:int):void { LI32(n); } );
}
function rangeOffsReadTestInt():Boolean
{
return rangeTest(4, function(n:int):void { var k:int = n - 4; LI32(ADD_I(k, 4)); }) &&
rangeTest(4, function(n:int):void { var k:int = n + 4; LI32(SUBTRACT_I(k, 4)); }) &&
rangeTest(4, function(n:int):void { var k:int = n + 4; LI32(ADD_I(k, -4)); }) &&
rangeTest(4, function(n:int):void { var k:int = n - 4; LI32(SUBTRACT_I(k, -4)); });
}
function rangeReadTestFloat():Boolean
{
return rangeTest(4, function(n:int):void { LF32(n); } );
}
function rangeOffsReadTestFloat():Boolean
{
return rangeTest(4, function(n:int):void { var k:int = n - 4; LF32(ADD_I(k, 4)); }) &&
rangeTest(4, function(n:int):void { var k:int = n + 4; LF32(SUBTRACT_I(k, 4)); }) &&
rangeTest(4, function(n:int):void { var k:int = n + 4; LF32(ADD_I(k, -4)); }) &&
rangeTest(4, function(n:int):void { var k:int = n - 4; LF32(SUBTRACT_I(k, -4)); });
}
function rangeReadTestDouble():Boolean
{
return rangeTest(8, function(n:int):void { LF64(n); } );
}
function rangeOffsReadTestDouble():Boolean
{
return rangeTest(8, function(n:int):void { var k:int = n - 4; LF64(ADD_I(k, 4)); }) &&
rangeTest(8, function(n:int):void { var k:int = n + 4; LF64(SUBTRACT_I(k, 4)); }) &&
rangeTest(8, function(n:int):void { var k:int = n + 4; LF64(ADD_I(k, -4)); }) &&
rangeTest(8, function(n:int):void { var k:int = n - 4; LF64(SUBTRACT_I(k, -4)); });
}
longTests.push(function():void {
Assert.expectEq("Range read test byte min", true, rangeReadTestByte());
Assert.expectEq("Range offs read test byte min", true, rangeOffsReadTestByte());
Assert.expectEq("Range read test short min", true, rangeReadTestShort());
Assert.expectEq("Range offs read test short min", true, rangeOffsReadTestShort());
Assert.expectEq("Range read test int min", true, rangeReadTestInt());
Assert.expectEq("Range offs read test int min", true, rangeOffsReadTestInt());
Assert.expectEq("Range read test float min", true, rangeReadTestFloat());
Assert.expectEq("Range offs read test float min", true, rangeOffsReadTestFloat());
Assert.expectEq("Range read test double min", true, rangeReadTestDouble());
Assert.expectEq("Range offs read test double min", true, rangeOffsReadTestDouble());
});
function rangeReadTestWide():Boolean
{
return rangeTest(2009, function(n:int):void {
var n2:int = n + 1004;
LI8(SUBTRACT_I(n2, 1004));
LI8(ADD_I(n2, 1004));
} );
}
longTests.push(function():void{
var oldLen:uint = currentDomain.domainMemory.length;
currentDomain.domainMemory.length = 16384;
Assert.expectEq("Range read test wide", true, rangeReadTestWide());
currentDomain.domainMemory.length = oldLen;
});
function rangeWriteTestByte():Boolean
{
return rangeTest(1, function(n:int):void { SI8(-1, n); } );
}
function rangeWriteTestShort():Boolean
{
return rangeTest(2, function(n:int):void { SI16(-1, n); } );
}
function rangeWriteTestInt():Boolean
{
return rangeTest(4, function(n:int):void { SI32(-1, n); } );
}
function rangeWriteTestFloat():Boolean
{
return rangeTest(4, function(n:int):void { SF32(-1, n); } );
}
function rangeWriteTestDouble():Boolean
{
return rangeTest(8, function(n:int):void { SF64(-1, n); } );
}
longTests.push(function():void {
Assert.expectEq("Range write test byte min", true, rangeWriteTestByte());
Assert.expectEq("Range write test short min", true, rangeWriteTestShort());
Assert.expectEq("Range write test int min", true, rangeWriteTestInt());
Assert.expectEq("Range write test float min", true, rangeWriteTestFloat());
Assert.expectEq("Range write test double min", true, rangeWriteTestDouble());
});
function rangeWriteTestWide():Boolean
{
return rangeTest(2009, function(n:int):void {
var n2:int = n + 1004;
SI8(-1, SUBTRACT_I(n2, 1004));
SI8(-1, ADD_I(n2, 1004));
} );
}
longTests.push(function():void {
var oldLen:uint = currentDomain.domainMemory.length;
currentDomain.domainMemory.length = 16384;
Assert.expectEq("Range write test wide", true, rangeWriteTestWide());
currentDomain.domainMemory.length = oldLen;
});
function genRangeTest(min:int, max:int, f:Function):Boolean
{
for(var n:int = min; n < max; n++)
if(!f(n))
return false;
return true;
}
function sextTest():Boolean
{
return genRangeTest(0x6000, 0x12000, function(n:int):Boolean
{
var sx16:int = (n << 16) >> 16;
var sx8:int = (n << 24) >> 24;
var sx1:int = (n << 31) >> 31;
if(sx16 != SXI16(n))
return false;
if(sx8 != SXI8(n))
return false;
if(sx1 != SXI1(n))
return false;
return true;
}
);
}
longTests.push(function():void {
Assert.expectEq("Sign extend test", true, sextTest());
});
function readWriteTest(size:int, f:Function):Boolean
{
var len:uint = currentDomain.domainMemory ? currentDomain.domainMemory.length :
domainClass.MIN_DOMAIN_MEMORY_LENGTH;
return genRangeTest(0, len - size + 1, f);
}
function readWriteTestByte(salt:int):Boolean
{
return readWriteTest(1, function(n:int):Boolean
{
var v:int = (n + salt) & 0xff;
SI8(v, n);
return LI8(n) == v;
}
);
}
function readWriteTestShort(salt:int):Boolean
{
return readWriteTest(2, function(n:int):Boolean
{
var v:int = (n + salt) & 0xffff;
SI16(v, n);
return LI16(n) == v;
}
);
}
function readWriteTestInt(salt:int):Boolean
{
return readWriteTest(4, function(n:int):Boolean
{
var v:int = (n + salt);
SI32(v, n);
return LI32(n) == v;
}
);
}
function readWriteTestFloat(salt:Number):Boolean
{
return readWriteTest(4, function(n:int):Boolean
{
var v:Number = (n + salt);
SF32(v, n);
return Math.abs(LF32(n) - v)<0.0001;
}
);
}
function readWriteTestDouble(salt:Number):Boolean
{
return readWriteTest(8, function(n:int):Boolean
{
var v:Number = (n + salt);
SF64(v, n);
return Math.abs(LF64(n) - v)<0.0001;
}
);
}
longTests.push(function():void {
Assert.expectEq("Read/write byte min", true, readWriteTestByte(12));
Assert.expectEq("Read/write short min", true, readWriteTestShort(3456));
Assert.expectEq("Read/write int min", true, readWriteTestInt(567890));
Assert.expectEq("Read/write float min", true, readWriteTestFloat(12.34));
Assert.expectEq("Read/write double min", true, readWriteTestDouble(34.56));
});
longTests.push(function():void {
ba = currentDomain.domainMemory;
currentDomain.domainMemory = null;
Assert.expectEq("Read/write byte scratch", true, readWriteTestByte(12));
Assert.expectEq("Read/write short scratch", true, readWriteTestShort(3456));
Assert.expectEq("Read/write int scratch", true, readWriteTestInt(567890));
Assert.expectEq("Read/write float scratch", true, readWriteTestFloat(12.34));
Assert.expectEq("Read/write double scratch", true, readWriteTestDouble(34.56));
currentDomain.domainMemory = ba;
});
//
////////////////////////////////////////////////////////////////
// longTests.push(test);
var n:int = 0;
for(n = 0; n < longTests.length; n++)
longTests[n]();
}

View File

@ -0,0 +1,44 @@
domainClass != null PASSED!
byteArrayClass != null PASSED!
currentDomain != null PASSED!
minMemSize >= 8 PASSED!
currentDomain.domainMemory == null PASSED!
Empty byte array ok PASSED!
Small byte array ok PASSED!
Wrong obj (Array) ok PASSED!
Wrong obj (Object) ok PASSED!
Wrong obj (Function) ok PASSED!
Wrong obj (user) ok PASSED!
Min sized byte array ok PASSED!
Read test byte w/ min sized PASSED!
Read test byte w/ sign extend w/ min sized PASSED!
Read test short w/ min sized PASSED!
Read test short w/ sign extend w/ min sized PASSED!
Read test int w/ min sized PASSED!
Read test float w/ min sized PASSED!
Read test double w/ min sized PASSED!
Write test byte w/ min sized PASSED!
Write test short w/ min sized PASSED!
Write test int w/ min sized PASSED!
Write test float w/ min sized PASSED!
Write test double w/ min sized PASSED!
Write min / verify min PASSED!
Write min / verify scratch PASSED!
Write scratch / verify scratch PASSED!
Write scratch / verify min PASSED!
Range read test byte min PASSED!
Range offs read test byte min PASSED!
Range read test short min PASSED!
Range offs read test short min PASSED!
Range read test int min PASSED!
Range offs read test int min PASSED!
Range read test float min PASSED!
Range offs read test float min PASSED!
Range read test double min PASSED!
Range offs read test double min PASSED!
Range read test wide PASSED!
Range write test byte min PASSED!
Range write test short min PASSED!
Range write test int min PASSED!
Range write test float min PASSED!
Range write test double min PASSED!

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,162 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION = "mops";
// var VERSION = "AS3";
// var TITLE = "sf32";
Assert.expectError("sf32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ SF32(0x41460200, ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
var idx:int=0;
SI8(0x01, idx+1);
SI8(0x01, idx+2);
// Test the memory boundaries
clearMemory();
Assert.expectError("sf32(0x41460200, -1)", Utils.RANGEERROR+1506, function(){ SF32(0x41460200, -1); });
Assert.expectError("sf32(0x41460200, mem.length)", Utils.RANGEERROR+1506, function(){ SF32(0x41460200, mem.length); });
Assert.expectError("sf32(0x41460200, mem.length-1)", Utils.RANGEERROR+1506, function(){ SF32(0x41460200, mem.length-1); });
Assert.expectError("sf32(0x41460200, mem.length-2)", Utils.RANGEERROR+1506, function(){ SF32(0x41460200, mem.length-2); });
Assert.expectError("sf32(0x41460200, mem.length-3)", Utils.RANGEERROR+1506, function(){ SF32(0x41460200, mem.length-3); });
Assert.expectEq("sf32(0x41460200, mem.length-4)", undefined, SF32(0x01010101, mem.length-4));
testli8();
testli16();
testli32();
testlf32();
testreadByte();
testreadUnsignedByte();
testreadInt();
testreadUnsignedInt();
testreadFloat();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testli8():void
{
clearMemory();
// 0x41460200 == 12.37548828125
SF32(12.37548828125, 0);
Assert.expectEq("li8 load 1st byte written by sf32(12.37548828125)", uint(0x00), LI8(0));
Assert.expectEq("li8 load 2nd byte written by sf32(12.37548828125)", uint(0x02), LI8(1));
Assert.expectEq("li8 load 3rd byte written by sf32(12.37548828125)", uint(0x46), LI8(2));
Assert.expectEq("li8 load 4th byte written by sf32(12.37548828125)", uint(0x41), LI8(3));
}
function testli16():void
{
clearMemory();
// 0x41460200 == 12.37548828125
SF32(12.37548828125, 0);
Assert.expectEq("li16 load bytes written by sf32()", 0x0200, LI16(0));
Assert.expectEq("li16 load bytes written by sf32()", 0x4146, LI16(2));
}
function testli32():void
{
clearMemory();
// 0x41460200 == 12.37548828125
SF32(12.37548828125, 0);
Assert.expectEq("li32 load bytes written by sf32()", int(0x41460200), LI32(0));
}
function testlf32():void
{
clearMemory();
// 0x41460200 == 12.37548828125
SF32(12.37548828125, 0);
Assert.expectEq("lf32 load bytes written by sf32()", 12.37548828125, LF32(0));
}
function testreadByte():void
{
clearMemory();
// 0x41460200 == 12.37548828125
SF32(12.37548828125, 0);
mem.position = 0;
Assert.expectEq("readByte() load bytes written by sf32()", 0x00, mem.readByte());
Assert.expectEq("readByte() load bytes written by sf32()", 0x02, mem.readByte());
Assert.expectEq("readByte() load bytes written by sf32()", 0x46, mem.readByte());
Assert.expectEq("readByte() load bytes written by sf32()", 0x41, mem.readByte());
}
function testreadUnsignedByte():void
{
clearMemory();
// 0x41460200 == 12.37548828125
SF32(12.37548828125, 0);
mem.position = 0;
Assert.expectEq("readUnsignedByte() load bytes written by sf32()", 0x00, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by sf32()", 0x02, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by sf32()", 0x46, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by sf32()", 0x41, mem.readUnsignedByte());
}
function testreadInt():void
{
clearMemory();
// 0x41460200 == 12.37548828125
SF32(12.37548828125, 0);
mem.position = 0;
Assert.expectEq("readInt() load bytes written by sf32()", int(0x41460200), mem.readInt());
}
function testreadUnsignedInt():void
{
clearMemory();
// 0x41460200 == 12.37548828125
SF32(12.37548828125, 0);
mem.position = 0;
Assert.expectEq("readUnsignedInt() load bytes written by sf32()", uint(0x41460200), mem.readUnsignedInt());
}
function testreadFloat():void
{
clearMemory();
// 0x41460200 == 12.37548828125
SF32(12.37548828125, 0);
mem.position = 0;
Assert.expectEq("readFloat() load bytes written by sf32()", 12.37548828125, mem.readFloat());
}
}

View File

@ -0,0 +1,26 @@
sf32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
sf32(0x41460200, -1) PASSED!
sf32(0x41460200, mem.length) PASSED!
sf32(0x41460200, mem.length-1) PASSED!
sf32(0x41460200, mem.length-2) PASSED!
sf32(0x41460200, mem.length-3) PASSED!
sf32(0x41460200, mem.length-4) PASSED!
li8 load 1st byte written by sf32(12.37548828125) PASSED!
li8 load 2nd byte written by sf32(12.37548828125) PASSED!
li8 load 3rd byte written by sf32(12.37548828125) PASSED!
li8 load 4th byte written by sf32(12.37548828125) PASSED!
li16 load bytes written by sf32() PASSED!
li16 load bytes written by sf32() PASSED!
li32 load bytes written by sf32() PASSED!
lf32 load bytes written by sf32() PASSED!
readByte() load bytes written by sf32() PASSED!
readByte() load bytes written by sf32() PASSED!
readByte() load bytes written by sf32() PASSED!
readByte() load bytes written by sf32() PASSED!
readUnsignedByte() load bytes written by sf32() PASSED!
readUnsignedByte() load bytes written by sf32() PASSED!
readUnsignedByte() load bytes written by sf32() PASSED!
readUnsignedByte() load bytes written by sf32() PASSED!
readInt() load bytes written by sf32() PASSED!
readUnsignedInt() load bytes written by sf32() PASSED!
readFloat() load bytes written by sf32() PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,200 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION = "mops";
// var VERSION = "AS3";
// var TITLE = "sf64";
// 0x4146020041460200 == 2.8846085099489688873291015625E6
Assert.expectError("sf64(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ SF64(2.8846085099489688873291015625E6, ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
// Test the memory boundaries
clearMemory();
Assert.expectError("sf64(0x4146020041460200, -1)", Utils.RANGEERROR+1506, function(){ SF64(2.8846085099489688873291015625E6, -1); });
Assert.expectError("sf64(0x4146020041460200, mem.length)", Utils.RANGEERROR+1506, function(){ SF64(2.8846085099489688873291015625E6, mem.length); });
Assert.expectError("sf64(0x4146020041460200, mem.length-1)", Utils.RANGEERROR+1506, function(){ SF64(2.8846085099489688873291015625E6, mem.length-1); });
Assert.expectError("sf64(0x4146020041460200, mem.length-2)", Utils.RANGEERROR+1506, function(){ SF64(2.8846085099489688873291015625E6, mem.length-2); });
Assert.expectError("sf64(0x4146020041460200, mem.length-3)", Utils.RANGEERROR+1506, function(){ SF64(2.8846085099489688873291015625E6, mem.length-3); });
Assert.expectError("sf64(0x4146020041460200, mem.length-4)", Utils.RANGEERROR+1506, function(){ SF64(2.8846085099489688873291015625E6, mem.length-4); });
Assert.expectError("sf64(0x4146020041460200, mem.length-5)", Utils.RANGEERROR+1506, function(){ SF64(2.8846085099489688873291015625E6, mem.length-5); });
Assert.expectError("sf64(0x4146020041460200, mem.length-6)", Utils.RANGEERROR+1506, function(){ SF64(2.8846085099489688873291015625E6, mem.length-6); });
Assert.expectError("sf64(0x4146020041460200, mem.length-7)", Utils.RANGEERROR+1506, function(){ SF64(2.8846085099489688873291015625E6, mem.length-7); });
Assert.expectEq("sf64(0x4146020041460200, mem.length-8)", undefined, SF64(0x4146020041460200, mem.length-8));
testli8();
testli16();
testli32();
testlf32();
testlf64();
testreadByte();
testreadUnsignedByte();
testreadInt();
testreadUnsignedInt();
testreadFloat();
testreadDouble();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testli8():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
Assert.expectEq("li8 load 1st byte written by sf64()", uint(0x00), LI8(0));
Assert.expectEq("li8 load 2nd byte written by sf64()", uint(0x02), LI8(1));
Assert.expectEq("li8 load 3rd byte written by sf64()", uint(0x46), LI8(2));
Assert.expectEq("li8 load 4th byte written by sf64()", uint(0x41), LI8(3));
Assert.expectEq("li8 load 5th byte written by sf64()", uint(0x00), LI8(4));
Assert.expectEq("li8 load 6th byte written by sf64()", uint(0x02), LI8(5));
Assert.expectEq("li8 load 7th byte written by sf64()", uint(0x46), LI8(6));
Assert.expectEq("li8 load 8th byte written by sf64()", uint(0x41), LI8(7));
}
function testli16():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
Assert.expectEq("li16 load bytes written by sf64()", 0x0200, LI16(0));
Assert.expectEq("li16 load bytes written by sf64()", 0x4146, LI16(2));
Assert.expectEq("li16 load bytes written by sf64()", 0x0200, LI16(4));
Assert.expectEq("li16 load bytes written by sf64()", 0x4146, LI16(6));
}
function testli32():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
Assert.expectEq("li32 load bytes written by sf64()", int(0x41460200), LI32(0));
Assert.expectEq("li32 load bytes written by sf64()", int(0x41460200), LI32(4));
}
function testlf32():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
Assert.expectEq("lf32 load bytes written by sf64()", 12.37548828125, LF32(0));
Assert.expectEq("lf32 load bytes written by sf64()", 12.37548828125, LF32(4));
}
function testlf64():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
Assert.expectEq("lf64 load bytes written by sf64()", 2.8846085099489688873291015625E6, LF64(0));
}
function testreadByte():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
mem.position = 0;
Assert.expectEq("readByte() load 1st byte written by sf64()", 0x00, mem.readByte());
Assert.expectEq("readByte() load 2nd byte written by sf64()", 0x02, mem.readByte());
Assert.expectEq("readByte() load 3rd byte written by sf64()", 0x46, mem.readByte());
Assert.expectEq("readByte() load 4th byte written by sf64()", 0x41, mem.readByte());
Assert.expectEq("readByte() load 5th byte written by sf64()", 0x00, mem.readByte());
Assert.expectEq("readByte() load 6th byte written by sf64()", 0x02, mem.readByte());
Assert.expectEq("readByte() load 7th byte written by sf64()", 0x46, mem.readByte());
Assert.expectEq("readByte() load 8th byte written by sf64()", 0x41, mem.readByte());
}
function testreadUnsignedByte():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
mem.position = 0;
Assert.expectEq("readUnsignedByte() load 1st byte written by sf64()", 0x00, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load 2nd byte written by sf64()", 0x02, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load 3rd byte written by sf64()", 0x46, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load 4th byte written by sf64()", 0x41, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load 5th byte written by sf64()", 0x00, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load 6th byte written by sf64()", 0x02, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load 7th byte written by sf64()", 0x46, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load 8th byte written by sf64()", 0x41, mem.readUnsignedByte());
}
function testreadInt():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
mem.position = 0;
Assert.expectEq("readInt() load bytes written by sf64()", int(0x41460200), mem.readInt());
Assert.expectEq("readInt() load bytes written by sf64()", int(0x41460200), mem.readInt());
}
function testreadUnsignedInt():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
mem.position = 0;
Assert.expectEq("readUnsignedInt() load bytes written by sf64()", uint(0x41460200), mem.readUnsignedInt());
Assert.expectEq("readUnsignedInt() load bytes written by sf64()", uint(0x41460200), mem.readUnsignedInt());
}
function testreadFloat():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
mem.position = 0;
Assert.expectEq("readFloat() load bytes written by sf64()", 12.37548828125, mem.readFloat());
Assert.expectEq("readFloat() load bytes written by sf64()", 12.37548828125, mem.readFloat());
}
function testreadDouble():void
{
clearMemory();
// 0x4146020041460200 == 2.8846085099489688873291015625E6
SF64(2.8846085099489688873291015625E6, 0);
mem.position = 0;
Assert.expectEq("readDouble() load bytes written by sf64()", 2.8846085099489688873291015625E6, mem.readDouble());
}
}

View File

@ -0,0 +1,51 @@
sf64(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
sf64(0x4146020041460200, -1) PASSED!
sf64(0x4146020041460200, mem.length) PASSED!
sf64(0x4146020041460200, mem.length-1) PASSED!
sf64(0x4146020041460200, mem.length-2) PASSED!
sf64(0x4146020041460200, mem.length-3) PASSED!
sf64(0x4146020041460200, mem.length-4) PASSED!
sf64(0x4146020041460200, mem.length-5) PASSED!
sf64(0x4146020041460200, mem.length-6) PASSED!
sf64(0x4146020041460200, mem.length-7) PASSED!
sf64(0x4146020041460200, mem.length-8) PASSED!
li8 load 1st byte written by sf64() PASSED!
li8 load 2nd byte written by sf64() PASSED!
li8 load 3rd byte written by sf64() PASSED!
li8 load 4th byte written by sf64() PASSED!
li8 load 5th byte written by sf64() PASSED!
li8 load 6th byte written by sf64() PASSED!
li8 load 7th byte written by sf64() PASSED!
li8 load 8th byte written by sf64() PASSED!
li16 load bytes written by sf64() PASSED!
li16 load bytes written by sf64() PASSED!
li16 load bytes written by sf64() PASSED!
li16 load bytes written by sf64() PASSED!
li32 load bytes written by sf64() PASSED!
li32 load bytes written by sf64() PASSED!
lf32 load bytes written by sf64() PASSED!
lf32 load bytes written by sf64() PASSED!
lf64 load bytes written by sf64() PASSED!
readByte() load 1st byte written by sf64() PASSED!
readByte() load 2nd byte written by sf64() PASSED!
readByte() load 3rd byte written by sf64() PASSED!
readByte() load 4th byte written by sf64() PASSED!
readByte() load 5th byte written by sf64() PASSED!
readByte() load 6th byte written by sf64() PASSED!
readByte() load 7th byte written by sf64() PASSED!
readByte() load 8th byte written by sf64() PASSED!
readUnsignedByte() load 1st byte written by sf64() PASSED!
readUnsignedByte() load 2nd byte written by sf64() PASSED!
readUnsignedByte() load 3rd byte written by sf64() PASSED!
readUnsignedByte() load 4th byte written by sf64() PASSED!
readUnsignedByte() load 5th byte written by sf64() PASSED!
readUnsignedByte() load 6th byte written by sf64() PASSED!
readUnsignedByte() load 7th byte written by sf64() PASSED!
readUnsignedByte() load 8th byte written by sf64() PASSED!
readInt() load bytes written by sf64() PASSED!
readInt() load bytes written by sf64() PASSED!
readUnsignedInt() load bytes written by sf64() PASSED!
readUnsignedInt() load bytes written by sf64() PASSED!
readFloat() load bytes written by sf64() PASSED!
readFloat() load bytes written by sf64() PASSED!
readDouble() load bytes written by sf64() PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,245 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION = "mops";
// var VERSION = "AS3";
// var TITLE = "si16";
Assert.expectError("si16(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ SI16(0x0111, ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
/**
* Test that ONLY the lowest 16 bits are stored
*/
clearMemory();
SI16(0x7F5A32, 0); // should only store 0x5A32
// li16(1) should load 0x005A since memory is zereod
Assert.expectEq("si16() only stores the least significant 16 bits", 0x005A, LI16(1));
// Test the memory boundaries
clearMemory();
Assert.expectError("si16(0x0101, -1)", Utils.RANGEERROR+1506, function(){ SI16(0x0101, -1); });
Assert.expectError("si16(0x0101, mem.length)", Utils.RANGEERROR+1506, function(){ SI16(0x0101, mem.length); });
Assert.expectError("si16(0x0101, mem.length-1)", Utils.RANGEERROR+1506, function(){ SI16(0x0101, mem.length-1); });
Assert.expectEq("si16(0x0101, mem.length-2)", undefined, SI16(0x0101, mem.length-2));
Assert.expectEq("si16(0x0101FE, mem.length-2), should only store 16 bits so no overrun", undefined, SI16(0x0101FE, mem.length-2));
Assert.expectEq("si16(0x0101FE, mem.length-2), should only store 16 bits so no overrun confirm", 0x01FE, LI16(mem.length-2));
testli8();
testli16();
testli32();
testlf32();
testlf64();
testreadByte();
testreadUnsignedByte();
testreadBoolean();
testreadInt();
testreadUnsignedInt();
testreadFloat();
testreadDouble();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testli8():void
{
clearMemory();
SI16(0x807F, 0);
Assert.expectEq("li8 load 1st byte written by si16(0x807F)", 0x7F, LI8(0));
Assert.expectEq("li8 load 2nd byte written by si16(0x807F)", uint(0x80), LI8(1));
}
function testli16():void
{
clearMemory();
SI16(0x80DE, 0);
Assert.expectEq("li16 load bytes written by si16()", 0x80DE, LI16(0));
}
function testli32():void
{
clearMemory();
SI16(0x80DE, 2);
SI16(0x32F1, 0);
Assert.expectEq("li32 load bytes written by si16()", int(0x80DE32F1), LI32(0));
}
function testlf32():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
SI16(0x4146, 2);
SI16(0x0000, 0);
Assert.expectEq("lf32 load bytes written by si16()", 12.375, LF32(0));
}
function testlf64():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
SI16(0x43E1, 6);
SI16(0xC3ED, 4);
SI16(0xA52E, 2);
SI16(0x0C09, 0);
Assert.expectEq("lf64 load bytes written by si16()", 1.0241024102410242048E19, LF64(0));
}
function testreadByte():void
{
clearMemory();
SI16(0x007F, 0);
SI16(0x80FF, 2);
mem.position = 0;
Assert.expectEq("readByte() load bytes written by si16(0x007F)", 0x7F, mem.readByte());
Assert.expectEq("readByte() load bytes written by si16(0x007F)", 0, mem.readByte());
Assert.expectEq("readByte() load bytes written by si16(0x80FF)", -1, mem.readByte());
Assert.expectEq("readByte() load bytes written by si16(0x80FF)", -128, mem.readByte());
}
function testreadUnsignedByte():void
{
clearMemory();
SI16(0x007F, 0);
SI16(0x80FF, 2);
mem.position = 0;
Assert.expectEq("readUnsignedByte() load bytes written by si16(0x007F)", 127, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by si16(0x007F)", 0, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by si16(0x80FF)", 255, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by si16(0x80FF)", 128, mem.readUnsignedByte());
}
function testreadBoolean():void
{
clearMemory();
SI16(0x0100, 0);
mem.position = 0;
Assert.expectEq("readBoolean() load bytes written by si16(0x0100)", false, mem.readBoolean());
Assert.expectEq("readBoolean() load bytes written by si16(0x0100)", true, mem.readBoolean());
}
function testreadInt():void
{
clearMemory();
SI16(0x80DE, 2);
SI16(0x32F1, 0);
mem.position = 0;
Assert.expectEq("readInt() load bytes written by si16()", int(0x80DE32F1), mem.readInt());
}
function testreadUnsignedInt():void
{
clearMemory();
SI16(0x80DE, 2);
SI16(0x32F1, 0);
mem.position = 0;
Assert.expectEq("readUnsignedInt() load bytes written by si16()", uint(0x80DE32F1), mem.readUnsignedInt());
}
function testreadFloat():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
SI16(0x4146, 2);
SI16(0x0000, 0);
mem.position = 0;
Assert.expectEq("readFloat() load bytes written by si16()", 12.375, mem.readFloat());
}
function testreadDouble():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
SI16(0x43E1, 6);
SI16(0xC3ED, 4);
SI16(0xA52E, 2);
SI16(0x0C09, 0);
mem.position = 0;
Assert.expectEq("readDouble() load bytes written by si16()", 1.0241024102410242048E19, mem.readDouble());
}
}

View File

@ -0,0 +1,28 @@
si16(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
si16() only stores the least significant 16 bits PASSED!
si16(0x0101, -1) PASSED!
si16(0x0101, mem.length) PASSED!
si16(0x0101, mem.length-1) PASSED!
si16(0x0101, mem.length-2) PASSED!
si16(0x0101FE, mem.length-2), should only store 16 bits so no overrun PASSED!
si16(0x0101FE, mem.length-2), should only store 16 bits so no overrun confirm PASSED!
li8 load 1st byte written by si16(0x807F) PASSED!
li8 load 2nd byte written by si16(0x807F) PASSED!
li16 load bytes written by si16() PASSED!
li32 load bytes written by si16() PASSED!
lf32 load bytes written by si16() PASSED!
lf64 load bytes written by si16() PASSED!
readByte() load bytes written by si16(0x007F) PASSED!
readByte() load bytes written by si16(0x007F) PASSED!
readByte() load bytes written by si16(0x80FF) PASSED!
readByte() load bytes written by si16(0x80FF) PASSED!
readUnsignedByte() load bytes written by si16(0x007F) PASSED!
readUnsignedByte() load bytes written by si16(0x007F) PASSED!
readUnsignedByte() load bytes written by si16(0x80FF) PASSED!
readUnsignedByte() load bytes written by si16(0x80FF) PASSED!
readBoolean() load bytes written by si16(0x0100) PASSED!
readBoolean() load bytes written by si16(0x0100) PASSED!
readInt() load bytes written by si16() PASSED!
readUnsignedInt() load bytes written by si16() PASSED!
readFloat() load bytes written by si16() PASSED!
readDouble() load bytes written by si16() PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,236 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION = "mops";
// var VERSION = "AS3";
// var TITLE = "si32";
Assert.expectError("si32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ SI32(0x01110101, ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
/**
* Test that ONLY the lowest 32 bits are stored
*/
clearMemory();
SI32(0x7F5A325601, 0); // should only store 0x5A325601
// li32(1) should load 0x005A3256 since memory is zereod
Assert.expectEq("si32() only stores the least significant 32 bits", 0x005A3256, LI32(1));
// Test the memory boundaries
clearMemory();
Assert.expectError("si32(0x01010101, -1)", Utils.RANGEERROR+1506, function(){ SI32(0x01010101, -1); });
Assert.expectError("si32(0x01010101, mem.length)", Utils.RANGEERROR+1506, function(){ SI32(0x01010101, mem.length); });
Assert.expectError("si32(0x01010101, mem.length-1)", Utils.RANGEERROR+1506, function(){ SI32(0x01010101, mem.length-1); });
Assert.expectError("si32(0x01010101, mem.length-2)", Utils.RANGEERROR+1506, function(){ SI32(0x01010101, mem.length-2); });
Assert.expectError("si32(0x01010101, mem.length-3)", Utils.RANGEERROR+1506, function(){ SI32(0x01010101, mem.length-3); });
Assert.expectEq("si32(0x01010101, mem.length-4)", undefined, SI32(0x01010101, mem.length-4));
Assert.expectEq("si32(0x7F5A325601, mem.length-4), should only store 32 bits so no overrun", undefined, SI32(0x7F5A325601, mem.length-4));
Assert.expectEq("si32(0x7F5A325601, mem.length-4), should only store 32 bits so no overrun confirm", 0x5A325601, LI32(mem.length-4));
testli8();
testli16();
testli32();
testlf32();
testlf64();
testreadByte();
testreadUnsignedByte();
testreadBoolean();
testreadInt();
testreadUnsignedInt();
testreadFloat();
testreadDouble();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testli8():void
{
clearMemory();
SI32(0x807FDEF5, 0);
Assert.expectEq("li8 load 1st byte written by si32(0x807FDEF5)", uint(0xF5), LI8(0));
Assert.expectEq("li8 load 2nd byte written by si32(0x807FDEF5)", uint(0xDE), LI8(1));
Assert.expectEq("li8 load 3rd byte written by si32(0x807FDEF5)", uint(0x7F), LI8(2));
Assert.expectEq("li8 load 4th byte written by si32(0x807FDEF5)", uint(0x80), LI8(3));
}
function testli16():void
{
clearMemory();
SI32(0x80DE7F5A, 0);
Assert.expectEq("li16 load bytes written by si32()", 0x7F5A, LI16(0));
Assert.expectEq("li16 load bytes written by si32()", 0x80DE, LI16(2));
}
function testli32():void
{
clearMemory();
SI32(0x80DE32F1, 0);
Assert.expectEq("li32 load bytes written by si32()", int(0x80DE32F1), LI32(0));
}
function testlf32():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
SI32(0x41460000, 0);
Assert.expectEq("lf32 load bytes written by si32()", 12.375, LF32(0));
}
function testlf64():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
SI32(0x43E1C3ED, 4);
SI32(0xA52E0C09, 0);
Assert.expectEq("lf64 load bytes written by si32()", 1.0241024102410242048E19, LF64(0));
}
function testreadByte():void
{
clearMemory();
SI32(0x80FF007F, 0);
mem.position = 0;
Assert.expectEq("readByte() load bytes written by si32(0x80FF007F)", 0x7F, mem.readByte());
Assert.expectEq("readByte() load bytes written by si32(0x80FF007F)", 0, mem.readByte());
Assert.expectEq("readByte() load bytes written by si32(0x80FF007F)", -1, mem.readByte());
Assert.expectEq("readByte() load bytes written by si32(0x80FF007F)", -128, mem.readByte());
}
function testreadUnsignedByte():void
{
clearMemory();
SI32(0x80FF007F, 0);
mem.position = 0;
Assert.expectEq("readUnsignedByte() load bytes written by si32(0x80FF007F)", 127, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by si32(0x80FF007F)", 0, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by si32(0x80FF007F)", 255, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by si32(0x80FF007F)", 128, mem.readUnsignedByte());
}
function testreadBoolean():void
{
clearMemory();
SI32(0x01000100, 0);
mem.position = 0;
Assert.expectEq("readBoolean() load bytes written by si32(0x01000100)", false, mem.readBoolean());
Assert.expectEq("readBoolean() load bytes written by si32(0x01000100)", true, mem.readBoolean());
}
function testreadInt():void
{
clearMemory();
SI32(0x80DE32F1, 0);
mem.position = 0;
Assert.expectEq("readInt() load bytes written by si32()", int(0x80DE32F1), mem.readInt());
}
function testreadUnsignedInt():void
{
clearMemory();
SI32(0x80DE32F1, 0);
mem.position = 0;
Assert.expectEq("readUnsignedInt() load bytes written by si32()", uint(0x80DE32F1), mem.readUnsignedInt());
}
function testreadFloat():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
SI32(0x41460000, 0);
mem.position = 0;
Assert.expectEq("readFloat() load bytes written by si32()", 12.375, mem.readFloat());
}
function testreadDouble():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
SI32(0x43E1C3ED, 4);
SI32(0xA52E0C09, 0);
mem.position = 0;
Assert.expectEq("readDouble() load bytes written by si32()", 1.0241024102410242048E19, mem.readDouble());
}
}

View File

@ -0,0 +1,33 @@
si32(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
si32() only stores the least significant 32 bits PASSED!
si32(0x01010101, -1) PASSED!
si32(0x01010101, mem.length) PASSED!
si32(0x01010101, mem.length-1) PASSED!
si32(0x01010101, mem.length-2) PASSED!
si32(0x01010101, mem.length-3) PASSED!
si32(0x01010101, mem.length-4) PASSED!
si32(0x7F5A325601, mem.length-4), should only store 32 bits so no overrun PASSED!
si32(0x7F5A325601, mem.length-4), should only store 32 bits so no overrun confirm PASSED!
li8 load 1st byte written by si32(0x807FDEF5) PASSED!
li8 load 2nd byte written by si32(0x807FDEF5) PASSED!
li8 load 3rd byte written by si32(0x807FDEF5) PASSED!
li8 load 4th byte written by si32(0x807FDEF5) PASSED!
li16 load bytes written by si32() PASSED!
li16 load bytes written by si32() PASSED!
li32 load bytes written by si32() PASSED!
lf32 load bytes written by si32() PASSED!
lf64 load bytes written by si32() PASSED!
readByte() load bytes written by si32(0x80FF007F) PASSED!
readByte() load bytes written by si32(0x80FF007F) PASSED!
readByte() load bytes written by si32(0x80FF007F) PASSED!
readByte() load bytes written by si32(0x80FF007F) PASSED!
readUnsignedByte() load bytes written by si32(0x80FF007F) PASSED!
readUnsignedByte() load bytes written by si32(0x80FF007F) PASSED!
readUnsignedByte() load bytes written by si32(0x80FF007F) PASSED!
readUnsignedByte() load bytes written by si32(0x80FF007F) PASSED!
readBoolean() load bytes written by si32(0x01000100) PASSED!
readBoolean() load bytes written by si32(0x01000100) PASSED!
readInt() load bytes written by si32() PASSED!
readUnsignedInt() load bytes written by si32() PASSED!
readFloat() load bytes written by si32() PASSED!
readDouble() load bytes written by si32() PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true

View File

@ -0,0 +1,276 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Test indirect memory access instructions.
package {
import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.system.ApplicationDomain;
import com.adobe.test.Assert;
import com.adobe.test.Utils;
// var SECTION:String = "mops";
// var VERSION:String = "AS3";
// var TITLE:String = "si8";
Assert.expectError("si8(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory()",
Utils.RANGEERROR+1506,
function(){ SI8(0x01, ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH); });
initMemory();
// Get a handle to the domainMemory after it is initialized
var mem:ByteArray = ApplicationDomain.currentDomain.domainMemory;
/**
* Test that ONLY the lowest 8 bits are stored
*/
clearMemory();
SI8(0x7F5A, 1); // should only store 0x5A
SI8(0x62, 0);
// li16(0) should load 0x5062
Assert.expectEq("si8() only stores the least significant 8 bits", 0x5A62, LI16(0));
// li8(2) should load 0x00, 0x7F should not have spilled
Assert.expectEq("si8() only stores the least significant 8 bits", 0x00, LI8(2));
// Test the memory boundaries
clearMemory();
Assert.expectError("si8(0x01, -1)", Utils.RANGEERROR+1506, function(){ SI8(0x01, -1); });
Assert.expectError("si8(0x01, mem.length)", Utils.RANGEERROR+1506, function(){ SI8(0x01, mem.length); });
Assert.expectEq("si8(0x01, mem.length-1)", undefined, SI8(0x01, mem.length-1));
Assert.expectEq("si8(0x01FE, mem.length-1), should only store 8 bits so no overrun", undefined, SI8(0x01FE, mem.length-1));
Assert.expectEq("si8(0x01FE, mem.length-1), should only store 8 bits so no overrun confirm", 0xFE, LI8(mem.length-1));
testli8();
testli16();
testli32();
testlf32();
testlf64();
testreadByte();
testreadUnsignedByte();
testreadBoolean();
testreadInt();
testreadUnsignedInt();
testreadFloat();
testreadDouble();
function initMemory(bytes:int = 0):void
{
var min:int = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
var memory:ByteArray = new ByteArray();
// memory opcodes use native endianness, but ByteArray defaults to BigEndian
memory.endian = Endian.LITTLE_ENDIAN;
memory.length = bytes > min ? bytes : min;
ApplicationDomain.currentDomain.domainMemory = memory;
}
function clearMemory():void
{
var i:int;
var len:int = ApplicationDomain.currentDomain.domainMemory.length;
for ( i=0; i < len; i++)
SI8(0x00, i);
}
function testli8():void
{
clearMemory();
SI8(0x7F, 0);
SI8(0x80, 1);
Assert.expectEq("li8 load byte written by si8(0x7F)", 0x7F, LI8(0));
Assert.expectEq("li8 load byte written by si8(0x80)", 0x80, LI8(1));
}
function testli16():void
{
clearMemory();
SI8(0xDE, 0);
SI8(0x80, 1);
Assert.expectEq("li16 load bytes written by si8()", 0x80DE, LI16(0));
}
function testli32():void
{
clearMemory();
SI8(0x80, 3);
SI8(0xDE, 2);
SI8(0x32, 1);
SI8(0xF1, 0);
Assert.expectEq("li32 load bytes written by si8()", int(0x80DE32F1), LI32(0));
}
function testlf32():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
SI8(0x41, 3);
SI8(0x46, 2);
SI8(0x00, 1);
SI8(0x00, 0);
Assert.expectEq("lf32 load bytes written by si8()", 12.375, LF32(0));
}
function testlf64():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
SI8(0x43, 7);
SI8(0xE1, 6);
SI8(0xC3, 5);
SI8(0xED, 4);
SI8(0xA5, 3);
SI8(0x2E, 2);
SI8(0x0C, 1);
SI8(0x09, 0);
Assert.expectEq("lf64 load bytes written by si8()", 1.0241024102410242048E19, LF64(0));
}
function testreadByte():void
{
clearMemory();
SI8(0x00, 0);
SI8(0x7F, 1);
SI8(0x80, 2);
SI8(0xFF, 3);
mem.position = 0;
Assert.expectEq("readByte() load bytes written by si8(0x00)", 0, mem.readByte());
Assert.expectEq("readByte() load bytes written by si8(0x7F)", 127, mem.readByte());
Assert.expectEq("readByte() load bytes written by si8(0x80)", -128, mem.readByte());
Assert.expectEq("readByte() load bytes written by si8(0xFF)", -1, mem.readByte());
}
function testreadUnsignedByte():void
{
clearMemory();
SI8(0x00, 0);
SI8(0x7F, 1);
SI8(0x80, 2);
SI8(0xFF, 3);
mem.position = 0;
Assert.expectEq("readUnsignedByte() load bytes written by si8(0x00)", 0, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by si8(0x7F)", 127, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by si8(0x80)", 128, mem.readUnsignedByte());
Assert.expectEq("readUnsignedByte() load bytes written by si8(0xFF)", 255, mem.readUnsignedByte());
}
function testreadBoolean():void
{
clearMemory();
SI8(0x00, 0);
SI8(0x01, 1);
mem.position = 0;
Assert.expectEq("readBoolean() load bytes written by si8(0x00)", false, mem.readBoolean());
Assert.expectEq("readBoolean() load bytes written by si8(0x01)", true, mem.readBoolean());
}
function testreadInt():void
{
clearMemory();
SI8(0x80, 3);
SI8(0xDE, 2);
SI8(0x32, 1);
SI8(0xF1, 0);
mem.position = 0;
Assert.expectEq("readInt() load bytes written by si8()", int(0x80DE32F1), mem.readInt());
}
function testreadUnsignedInt():void
{
clearMemory();
SI8(0x80, 3);
SI8(0xDE, 2);
SI8(0x32, 1);
SI8(0xF1, 0);
mem.position = 0;
Assert.expectEq("readUnsignedInt() load bytes written by si8()", uint(0x80DE32F1), mem.readUnsignedInt());
}
function testreadFloat():void
{
/******************************************
* 12.375f
* (12.375)10 =
* (12)10 + (0.375)10 =
* (1100)2 + (0.011)2 =
* (1100.011)2 =
* (1.100011)2 x2^3
* sign = 0
* exponent = 130 (127 biased, 127 +3, binary 1000 0010)
* fraction = 100011
* 0-10000010-10001100000000000000000
* 01000001 01000110 00000000 00000000 -> int 1095106560 -> 0x41460000
*****************************************/
clearMemory();
SI8(0x41, 3);
SI8(0x46, 2);
SI8(0x00, 1);
SI8(0x00, 0);
mem.position = 0;
Assert.expectEq("readFloat() load bytes written by si8()", 12.375, mem.readFloat());
}
function testreadDouble():void
{
/******************************************
* 10241024102410241024
* 0x43E1C3EDA52E0C09
* sign = 0
* exponent = 10000111110
* mantissa = 0001110000111110110110100101001011100000110000001001
* 0x43E1C3EDA52E0C09 =
* 01000011 11100001 11000011 11101101
* 10100101 00101110 00001100 00001001
*****************************************/
clearMemory();
SI8(0x43, 7);
SI8(0xE1, 6);
SI8(0xC3, 5);
SI8(0xED, 4);
SI8(0xA5, 3);
SI8(0x2E, 2);
SI8(0x0C, 1);
SI8(0x09, 0);
mem.position = 0;
Assert.expectEq("readDouble() load bytes written by si8()", 1.0241024102410242048E19, mem.readDouble());
}
}

View File

@ -0,0 +1,28 @@
si8(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) prior to initMemory() PASSED!
si8() only stores the least significant 8 bits PASSED!
si8() only stores the least significant 8 bits PASSED!
si8(0x01, -1) PASSED!
si8(0x01, mem.length) PASSED!
si8(0x01, mem.length-1) PASSED!
si8(0x01FE, mem.length-1), should only store 8 bits so no overrun PASSED!
si8(0x01FE, mem.length-1), should only store 8 bits so no overrun confirm PASSED!
li8 load byte written by si8(0x7F) PASSED!
li8 load byte written by si8(0x80) PASSED!
li16 load bytes written by si8() PASSED!
li32 load bytes written by si8() PASSED!
lf32 load bytes written by si8() PASSED!
lf64 load bytes written by si8() PASSED!
readByte() load bytes written by si8(0x00) PASSED!
readByte() load bytes written by si8(0x7F) PASSED!
readByte() load bytes written by si8(0x80) PASSED!
readByte() load bytes written by si8(0xFF) PASSED!
readUnsignedByte() load bytes written by si8(0x00) PASSED!
readUnsignedByte() load bytes written by si8(0x7F) PASSED!
readUnsignedByte() load bytes written by si8(0x80) PASSED!
readUnsignedByte() load bytes written by si8(0xFF) PASSED!
readBoolean() load bytes written by si8(0x00) PASSED!
readBoolean() load bytes written by si8(0x01) PASSED!
readInt() load bytes written by si8() PASSED!
readUnsignedInt() load bytes written by si8() PASSED!
readFloat() load bytes written by si8() PASSED!
readDouble() load bytes written by si8() PASSED!

Binary file not shown.

View File

@ -0,0 +1,2 @@
num_ticks = 1
known_failure = true