Author: fperrad
Date: Fri Dec 26 03:51:07 2008
New Revision: 34375

Added:
   trunk/languages/lua/t/bit/
   trunk/languages/lua/t/bit/bittest.lua   (contents, props changed)
   trunk/languages/lua/t/bit/nsievebits.lua   (contents, props changed)
Modified:
   trunk/MANIFEST
   trunk/MANIFEST.SKIP
   trunk/languages/lua/src/lib/bit.pir
   trunk/languages/lua/t/bit.t

Log:
[Lua] bit
- some fix
- add official test suite


Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST      (original)
+++ trunk/MANIFEST      Fri Dec 26 03:51:07 2008
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Wed Dec 24 13:06:20 2008 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Fri Dec 26 11:40:35 2008 UT
 #
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
@@ -1532,6 +1532,9 @@
 languages/ecmascript/MAINTAINER                             [ecmascript]
 languages/ecmascript/config/makefiles/root.in               [ecmascript]
 languages/ecmascript/js.pir                                 [ecmascript]
+languages/ecmascript/lib/Parrot/Test/JS.pm                  [ecmascript]
+languages/ecmascript/lib/Parrot/Test/JS/PJS.pm              [ecmascript]
+languages/ecmascript/lib/Parrot/Test/JS/SpiderMonkey.pm     [ecmascript]
 languages/ecmascript/src/builtin/builtins.pir               [ecmascript]
 languages/ecmascript/src/classes/Boolean.pir                [ecmascript]
 languages/ecmascript/src/classes/Completion.pir             [ecmascript]
@@ -1548,8 +1551,12 @@
 languages/ecmascript/t/01-literals.t                        [ecmascript]
 languages/ecmascript/t/02-operators.t                       [ecmascript]
 languages/ecmascript/t/02-sanity-var.t                      [ecmascript]
-#languages/ecmascript/t/03-boolean.t                         [ecmascript]
 languages/ecmascript/t/harness                              [ecmascript]
+languages/ecmascript/t/js_pt/10-version.t                   [ecmascript]
+languages/ecmascript/t/sanity_pt/00-literals.t              [ecmascript]
+languages/ecmascript/t/sanity_pt/01-vars.t                  [ecmascript]
+languages/ecmascript/t/sanity_pt/03-boolean.t               [ecmascript]
+languages/ecmascript/t/sanity_pt/05-objects.t               [ecmascript]
 languages/forth/MAINTAINER                                  [forth]
 languages/forth/config/makefiles/root.in                    [forth]
 languages/forth/forth.pir                                   [forth]
@@ -1828,6 +1835,8 @@
 languages/lua/t/basic.t                                     [lua]
 languages/lua/t/bc.t                                        [lua]
 languages/lua/t/bit.t                                       [lua]
+languages/lua/t/bit/bittest.lua                             [lua]
+languages/lua/t/bit/nsievebits.lua                          [lua]
 languages/lua/t/bitlib.t                                    [lua]
 languages/lua/t/boolean.t                                   [lua]
 languages/lua/t/closure.t                                   [lua]

Modified: trunk/MANIFEST.SKIP
==============================================================================
--- trunk/MANIFEST.SKIP (original)
+++ trunk/MANIFEST.SKIP Fri Dec 26 03:51:07 2008
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Wed Dec 24 13:06:20 2008 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Fri Dec 26 11:40:35 2008 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -752,6 +752,16 @@
 # generated from svn:ignore of 'languages/ecmascript/src/'
 ^languages/ecmascript/src/gen_.*\.pir$
 ^languages/ecmascript/src/gen_.*\.pir/
+# generated from svn:ignore of 'languages/ecmascript/t/js_pt/'
+^languages/ecmascript/t/js_pt/.*\.js$
+^languages/ecmascript/t/js_pt/.*\.js/
+^languages/ecmascript/t/js_pt/.*\.out$
+^languages/ecmascript/t/js_pt/.*\.out/
+# generated from svn:ignore of 'languages/ecmascript/t/sanity_pt/'
+^languages/ecmascript/t/sanity_pt/.*\.js$
+^languages/ecmascript/t/sanity_pt/.*\.js/
+^languages/ecmascript/t/sanity_pt/.*\.out$
+^languages/ecmascript/t/sanity_pt/.*\.out/
 # generated from svn:ignore of 'languages/forth/'
 ^languages/forth/Makefile$
 ^languages/forth/Makefile/

Modified: trunk/languages/lua/src/lib/bit.pir
==============================================================================
--- trunk/languages/lua/src/lib/bit.pir (original)
+++ trunk/languages/lua/src/lib/bit.pir Fri Dec 26 03:51:07 2008
@@ -211,7 +211,6 @@
     $I1 = lua_checknumber(1, x)
     $I2 = lua_checknumber(2, n)
     band $I2, 31
-    neg $I2
     rot $I0, $I1, $I2, 32
     .BRET($I0)
 .end
@@ -223,6 +222,7 @@
     $I1 = lua_checknumber(1, x)
     $I2 = lua_checknumber(2, n)
     band $I2, 31
+    neg $I2
     rot $I0, $I1, $I2, 32
     .BRET($I0)
 .end
@@ -239,8 +239,8 @@
     .param pmc x :optional
     .param pmc extra :slurpy
     $I1 = lua_checknumber(1, x)
-    $I0 = $I1 >> 24
-    $I2 = $I1 >> 8
+    $I0 = $I1 >>> 24
+    $I2 = $I1 >>> 8
     $I2 &= 0x0000ff00
     $I0 |= $I2
     $I3 = $I1 & 0x0000ff00

Modified: trunk/languages/lua/t/bit.t
==============================================================================
--- trunk/languages/lua/t/bit.t (original)
+++ trunk/languages/lua/t/bit.t Fri Dec 26 03:51:07 2008
@@ -32,7 +32,7 @@
     plan skip_all => "parrot only";
 }
 else {
-    plan tests => 6;
+    plan tests => 8;
 }
 
 language_output_is( 'lua', << 'CODE', << "OUTPUT", 'require' );
@@ -69,9 +69,24 @@
 language_output_is( 'lua', << 'CODE', << "OUTPUT", 'bit.bswap' );
 m = require "bit"
 assert(bit.bswap(0x12345678) == 0x78563412)
+assert(bit.bswap(0x9ABCDEF0) == 0xF0DEBC9A)
 CODE
 OUTPUT
 
+my $code;
+
+$code = Parrot::Test::slurp_file( "$FindBin::Bin/bit/bittest.lua" );
+$code .= "\nprint 'ok'\n";
+language_output_is( 'lua', $code, << "OUTPUT", 'bittest' );
+ok
+OUTPUT
+
+$code = Parrot::Test::slurp_file( "$FindBin::Bin/bit/nsievebits.lua" );
+$code .= "\nprint 'ok'\n";
+language_output_is( 'lua', $code, << "OUTPUT", 'nsievebits' );
+ok
+OUTPUT
+
 
 # Local Variables:
 #   mode: cperl

Added: trunk/languages/lua/t/bit/bittest.lua
==============================================================================
--- (empty file)
+++ trunk/languages/lua/t/bit/bittest.lua       Fri Dec 26 03:51:07 2008
@@ -0,0 +1,91 @@
+-- Test cases for bit operations library. Public domain.
+
+local bit = require"bit"
+
+local vb = {
+  0, 1, -1, 2, -2, 0x12345678, 0x87654321,
+  0x33333333, 0x77777777, 0x55aa55aa, 0xaa55aa55,
+  0x7fffffff, 0x80000000, 0xffffffff
+}
+
+local function cksum(name, s, r)
+  local z = 0
+  for i=1,#s do z = (z + string.byte(s, i)*i) % 2147483629 end
+  if z ~= r then
+    error("bit."..name.." test failed (got "..z..", expected "..r..")", 0)
+  end
+end
+
+local function check_unop(name, r)
+  local f = bit[name]
+  local s = 0;
+  if pcall(f) or pcall(f, "z") or pcall(f, true) then
+    error("bit."..name.." fails to detect argument errors", 0)
+  end
+  for _,x in ipairs(vb) do s = s..","..tostring(f(x)) end
+  cksum(name, s, r)
+end
+
+local function check_binop(name, r)
+  local f = bit[name]
+  local s = 0;
+  if pcall(f) or pcall(f, "z") or pcall(f, true) then
+    error("bit."..name.." fails to detect argument errors", 0)
+  end
+  for _,x in ipairs(vb) do
+    for _,y in ipairs(vb) do s = s..","..tostring(f(x, y)) end
+  end
+  cksum(name, s, r)
+end
+
+local function check_shift(name, r)
+  local f = bit[name]
+  local s = 0;
+  if pcall(f) or pcall(f, "z") or pcall(f, true) or pcall(f, 1) then
+    error("bit."..name.." fails to detect argument errors", 0)
+  end
+  for _,x in ipairs(vb) do
+    for y=0,31 do s = s..","..tostring(f(x, y)) end
+  end
+  cksum(name, s, r)
+end
+
+-- Minimal sanity checks.
+assert(0x7fffffff == 2147483647, "broken hex literals")
+assert(0xffffffff == -1 or 0xffffffff == 2^32-1, "broken hex literals")
+assert(tostring(-1) == "-1", "broken tostring()")
+assert(tostring(0xffffffff) == "-1" or tostring(0xffffffff) == "4294967295", 
"broken tostring()")
+
+-- Basic argument processing.
+assert(bit.tobit(1) == 1)
+assert(bit.band(1) == 1)
+assert(bit.bxor(1,2) == 3)
+assert(bit.bor(1,2,4,8,16,32,64,128) == 255)
+
+-- Apply operations to test vectors and compare checksums.
+check_unop("tobit", 282601)
+check_unop("bnot", 293242)
+--check_unop("bswap", 313216)
+
+check_binop("band", 41271123)
+check_binop("bor", 51325358)
+check_binop("bxor", 79412059)
+
+check_shift("lshift", 325441968)
+check_shift("rshift", 139179769)
+check_shift("arshift", 111469290)
+check_shift("rol", 302576086)
+check_shift("ror", 302491692)
+
+-- Do this last, since quite a few Lua installations fail.
+-- Note: this is not BitOp's fault, check the casts for case 'x' in
+--       str_format() in src/lstrlib.c.
+local s = string.format("%08x", 1)
+assert(s == "00000001", "broken string.format(\"%08x\", 1)")
+s = string.format("%x", 0x7fffffff)
+assert(s == "7fffffff", "broken string.format(\"%x\", 0x7fffffff)")
+s = string.format("%x", -1)
+assert(s == "ffffffff" or s == "ffffffffffffffff", "broken 
string.format(\"%x\", -1)")
+s = string.format("%x", 0xffffffff)
+assert(s == "ffffffff" or s == "ffffffffffffffff", "broken 
string.format(\"%x\", 0xffffffff)")
+

Added: trunk/languages/lua/t/bit/nsievebits.lua
==============================================================================
--- (empty file)
+++ trunk/languages/lua/t/bit/nsievebits.lua    Fri Dec 26 03:51:07 2008
@@ -0,0 +1,32 @@
+-- This is the (naive) Sieve of Eratosthenes. Public domain.
+
+local bit = require("bit")
+local band, bxor, rshift, rol = bit.band, bit.bxor, bit.rshift, bit.rol
+
+local function nsieve(p, m)
+  local count = 0
+  for i=0,(m+31)/32 do p[i] = -1 end
+  for i=2,m do
+    if band(rshift(p[rshift(i, 5)], i), 1) ~= 0 then
+      count = count + 1
+      for j=i+i,m,i do
+       local jx = rshift(j, 5)
+       p[jx] = band(p[jx], rol(-2, j))
+      end
+    end
+  end
+  return count
+end
+
+if arg and arg[1] then
+  local N = tonumber(arg[1]) or 1
+  if N < 2 then N = 2 end
+  local primes = {}
+
+  for i=0,2 do
+    local m = (2^(N-i))*10000
+    io.write(string.format("Primes up to %8d %8d\n", m, nsieve(primes, m)))
+  end
+else
+  assert(nsieve({}, 10000) == 1229)
+end

Reply via email to