Migrate blink tests that are not relevant to blink into a new V8 test suite called...
authormachenbach@chromium.org <machenbach@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 26 Jun 2013 14:23:30 +0000 (14:23 +0000)
committermachenbach@chromium.org <machenbach@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 26 Jun 2013 14:23:30 +0000 (14:23 +0000)
This initial CL contains the new test suite code and two tests for demonstration.

Other tests will follow in a separate CL.

R=jkummerow@chromium.org

Review URL: https://codereview.chromium.org/17260002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15339 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

.gitignore
test/message/testcfg.py
test/webkit/concat-while-having-a-bad-time-expected.txt [new file with mode: 0644]
test/webkit/concat-while-having-a-bad-time.js [new file with mode: 0644]
test/webkit/dfg-inlining-reg-alloc-expected.txt [new file with mode: 0644]
test/webkit/dfg-inlining-reg-alloc.js [new file with mode: 0644]
test/webkit/resources/standalone-post.js [new file with mode: 0644]
test/webkit/resources/standalone-pre.js [new file with mode: 0644]
test/webkit/testcfg.py [new file with mode: 0644]
test/webkit/webkit.status [new file with mode: 0644]
tools/testrunner/local/old_statusfile.py

index a04811d..656c4b3 100644 (file)
@@ -40,6 +40,7 @@ shell_g
 /test/test262/data
 /test/test262/test262-*
 /test/test262/test262.status2
+/test/webkit/webkit.status2
 /third_party
 /tools/jsfunfuzz
 /tools/jsfunfuzz.zip
index 11c0d19..411f71c 100644 (file)
@@ -95,7 +95,8 @@ class MessageTestSuite(testsuite.TestSuite):
     env = { "basename": os.path.basename(testpath + ".js") }
     if len(expected_lines) != len(actual_lines):
       return True
-    for (expected, actual) in itertools.izip(expected_lines, actual_lines):
+    for (expected, actual) in itertools.izip_longest(
+        expected_lines, actual_lines, fillvalue=''):
       pattern = re.escape(expected.rstrip() % env)
       pattern = pattern.replace("\\*", ".*")
       pattern = "^%s$" % pattern
diff --git a/test/webkit/concat-while-having-a-bad-time-expected.txt b/test/webkit/concat-while-having-a-bad-time-expected.txt
new file mode 100644 (file)
index 0000000..f949db9
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [42].concat() is [42]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/concat-while-having-a-bad-time.js b/test/webkit/concat-while-having-a-bad-time.js
new file mode 100644 (file)
index 0000000..dfda1e0
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating."
+);
+
+Object.defineProperty(Array.prototype, 0, { writable: false });
+shouldBe("[42].concat()", "[42]");
+
+
diff --git a/test/webkit/dfg-inlining-reg-alloc-expected.txt b/test/webkit/dfg-inlining-reg-alloc-expected.txt
new file mode 100644 (file)
index 0000000..8e7c55c
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that register allocation still works under register pressure induced by inlining, out-of-line function calls (i.e. unconditional register flushing), and slow paths for object creation (i.e. conditional register flushing).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inlining-reg-alloc.js b/test/webkit/dfg-inlining-reg-alloc.js
new file mode 100644 (file)
index 0000000..5429641
--- /dev/null
@@ -0,0 +1,166 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that register allocation still works under register pressure induced by inlining, out-of-line function calls (i.e. unconditional register flushing), and slow paths for object creation (i.e. conditional register flushing)."
+);
+
+// Inlineable constructor.
+function foo(a, b, c) {
+    this.a = a;
+    this.b = b;
+    this.c = c;
+}
+
+// Non-inlineable function. This relies on a size limit for inlining, but still
+// produces integers. It also relies on the VM not reasoning about Math.log deeply
+// enough to find some way of optimizing this code to be small enough to inline.
+function bar(a, b) {
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    return (a - b) | 0;
+}
+
+// Function into which we will inline foo but not bar.
+function baz(a, b) {
+    return new foo(bar(2 * a + 1, b - 1), bar(2 * a, b - 1), a);
+}
+
+// Do the test. It's crucial that o.a, o.b, and o.c are checked on each
+// loop iteration.
+for (var i = 0; i < 1000; ++i) {
+    var o = baz(i, i + 1);
+    shouldBe("o.a", "bar(2 * i + 1, i)");
+    shouldBe("o.b", "bar(2 * i, i)");
+    shouldBe("o.c", "i");
+}
diff --git a/test/webkit/resources/standalone-post.js b/test/webkit/resources/standalone-post.js
new file mode 100644 (file)
index 0000000..d157e78
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+wasPostTestScriptParsed = true;
+
+finishJSTest();
diff --git a/test/webkit/resources/standalone-pre.js b/test/webkit/resources/standalone-pre.js
new file mode 100644 (file)
index 0000000..f1cbe9f
--- /dev/null
@@ -0,0 +1,191 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var wasPostTestScriptParsed = false;
+var errorMessage;
+
+function description(msg)
+{
+    print(msg);
+    print("\nOn success, you will see a series of \"PASS\" messages, followed by \"TEST COMPLETE\".\n");
+    print();
+}
+
+function debug(msg)
+{
+    print(msg);
+}
+
+function escapeString(text)
+{
+    return text.replace(/\0/g, "");
+}
+
+function testPassed(msg)
+{
+    print("PASS", escapeString(msg));
+}
+
+function testFailed(msg)
+{
+    errorMessage = msg;
+    print("FAIL", escapeString(msg));
+}
+
+function areArraysEqual(_a, _b)
+{
+    if (Object.prototype.toString.call(_a) != Object.prototype.toString.call([]))
+        return false;
+    if (_a.length !== _b.length)
+        return false;
+    for (var i = 0; i < _a.length; i++)
+        if (_a[i] !== _b[i])
+            return false;
+    return true;
+}
+
+function isMinusZero(n)
+{
+    // the only way to tell 0 from -0 in JS is the fact that 1/-0 is
+    // -Infinity instead of Infinity
+    return n === 0 && 1/n < 0;
+}
+
+function isResultCorrect(_actual, _expected)
+{
+    if (_expected === 0)
+        return _actual === _expected && (1/_actual) === (1/_expected);
+    if (_actual === _expected)
+        return true;
+    if (typeof(_expected) == "number" && isNaN(_expected))
+        return typeof(_actual) == "number" && isNaN(_actual);
+    if (Object.prototype.toString.call(_expected) == Object.prototype.toString.call([]))
+        return areArraysEqual(_actual, _expected);
+    return false;
+}
+
+function stringify(v)
+{
+    if (v === 0 && 1/v < 0)
+        return "-0";
+    else return "" + v;
+}
+
+function shouldBe(_a, _b)
+{
+  if (typeof _a != "string" || typeof _b != "string")
+    debug("WARN: shouldBe() expects string arguments");
+  var exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     exception = e;
+  }
+  var _bv = eval(_b);
+
+  if (exception)
+    testFailed(_a + " should be " + _bv + ". Threw exception " + exception);
+  else if (isResultCorrect(_av, _bv))
+    testPassed(_a + " is " + _b);
+  else if (typeof(_av) == typeof(_bv))
+    testFailed(_a + " should be " + _bv + ". Was " + stringify(_av) + ".");
+  else
+    testFailed(_a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ").");
+}
+
+function shouldBeTrue(_a) { shouldBe(_a, "true"); }
+function shouldBeFalse(_a) { shouldBe(_a, "false"); }
+function shouldBeNaN(_a) { shouldBe(_a, "NaN"); }
+function shouldBeNull(_a) { shouldBe(_a, "null"); }
+
+function shouldBeEqualToString(a, b)
+{
+  if (typeof a !== "string" || typeof b !== "string")
+    debug("WARN: shouldBeEqualToString() expects string arguments");
+  var unevaledString = JSON.stringify(b);
+  shouldBe(a, unevaledString);
+}
+
+function shouldBeUndefined(_a)
+{
+  var exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     exception = e;
+  }
+
+  if (exception)
+    testFailed(_a + " should be undefined. Threw exception " + exception);
+  else if (typeof _av == "undefined")
+    testPassed(_a + " is undefined.");
+  else
+    testFailed(_a + " should be undefined. Was " + _av);
+}
+
+
+function shouldThrow(_a, _e)
+{
+  var exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     exception = e;
+  }
+
+  var _ev;
+  if (_e)
+      _ev =  eval(_e);
+
+  if (exception) {
+    if (typeof _e == "undefined" || exception == _ev)
+      testPassed(_a + " threw exception " + exception + ".");
+    else
+      testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Threw exception " + exception + ".");
+  } else if (typeof _av == "undefined")
+    testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was undefined.");
+  else
+    testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was " + _av + ".");
+}
+
+function isSuccessfullyParsed()
+{
+    // FIXME: Remove this and only report unexpected syntax errors.
+    if (!errorMessage)
+        successfullyParsed = true;
+    shouldBeTrue("successfullyParsed");
+    debug("\nTEST COMPLETE\n");
+}
+
+// It's possible for an async test to call finishJSTest() before js-test-post.js
+// has been parsed.
+function finishJSTest()
+{
+    wasFinishJSTestCalled = true;
+    if (!wasPostTestScriptParsed)
+        return;
+    isSuccessfullyParsed();
+}
diff --git a/test/webkit/testcfg.py b/test/webkit/testcfg.py
new file mode 100644 (file)
index 0000000..2c4a29c
--- /dev/null
@@ -0,0 +1,135 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+#       copyright notice, this list of conditions and the following
+#       disclaimer in the documentation and/or other materials provided
+#       with the distribution.
+#     * Neither the name of Google Inc. nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import itertools
+import os
+import re
+
+from testrunner.local import testsuite
+from testrunner.objects import testcase
+
+FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)")
+FILES_PATTERN = re.compile(r"//\s+Files:(.*)")
+SELF_SCRIPT_PATTERN = re.compile(r"//\s+Env: TEST_FILE_NAME")
+
+
+# TODO (machenbach): Share commonalities with mjstest.
+class WebkitTestSuite(testsuite.TestSuite):
+
+  def __init__(self, name, root):
+    super(WebkitTestSuite, self).__init__(name, root)
+
+  def ListTests(self, context):
+    tests = []
+    for dirname, dirs, files in os.walk(self.root):
+      for dotted in [x for x in dirs if x.startswith('.')]:
+        dirs.remove(dotted)
+      if 'resources' in dirs:
+        dirs.remove('resources')
+
+      dirs.sort()
+      files.sort()
+      for filename in files:
+        if filename.endswith(".js"):
+          testname = os.path.join(dirname[len(self.root) + 1:], filename[:-3])
+          test = testcase.TestCase(self, testname)
+          tests.append(test)
+    return tests
+
+  def GetFlagsForTestCase(self, testcase, context):
+    source = self.GetSourceForTest(testcase)
+    flags = [] + context.mode_flags
+    flags_match = re.findall(FLAGS_PATTERN, source)
+    for match in flags_match:
+      flags += match.strip().split()
+
+    files_list = []  # List of file names to append to command arguments.
+    files_match = FILES_PATTERN.search(source);
+    # Accept several lines of 'Files:'.
+    while True:
+      if files_match:
+        files_list += files_match.group(1).strip().split()
+        files_match = FILES_PATTERN.search(source, files_match.end())
+      else:
+        break
+    files = [ os.path.normpath(os.path.join(self.root, '..', '..', f))
+              for f in files_list ]
+    testfilename = os.path.join(self.root, testcase.path + self.suffix())
+    if SELF_SCRIPT_PATTERN.search(source):
+      env = ["-e", "TEST_FILE_NAME=\"%s\"" % testfilename.replace("\\", "\\\\")]
+      files = env + files
+    files.append(os.path.join(self.root, "resources/standalone-pre.js"))
+    files.append(testfilename)
+    files.append(os.path.join(self.root, "resources/standalone-post.js"))
+
+    flags += files
+    if context.isolates:
+      flags.append("--isolate")
+      flags += files
+
+    return testcase.flags + flags
+
+  def GetSourceForTest(self, testcase):
+    filename = os.path.join(self.root, testcase.path + self.suffix())
+    with open(filename) as f:
+      return f.read()
+
+  # TODO(machenbach): Share with test/message/testcfg.py
+  def _IgnoreLine(self, string):
+    """Ignore empty lines, valgrind output and Android output."""
+    if not string: return True
+    return (string.startswith("==") or string.startswith("**") or
+            string.startswith("ANDROID") or
+            # These five patterns appear in normal Native Client output.
+            string.startswith("DEBUG MODE ENABLED") or
+            string.startswith("tools/nacl-run.py") or
+            string.find("BYPASSING ALL ACL CHECKS") > 0 or
+            string.find("Native Client module will be loaded") > 0 or
+            string.find("NaClHostDescOpen:") > 0)
+
+  def IsFailureOutput(self, output, testpath):
+    if super(WebkitTestSuite, self).IsFailureOutput(output, testpath):
+      return True
+    file_name = os.path.join(self.root, testpath) + "-expected.txt"
+    with file(file_name, "r") as expected:
+      def ExpIterator():
+        for line in expected.readlines():
+          if line.startswith("#") or not line.strip(): continue
+          yield line.strip()
+      def ActIterator():
+        for line in output.stdout.splitlines():
+          if self._IgnoreLine(line.strip()): continue
+          yield line.strip()
+      for (expected, actual) in itertools.izip_longest(
+          ExpIterator(), ActIterator(), fillvalue=''):
+        if expected != actual:
+          return True
+      return False
+
+
+def GetSuite(name, root):
+  return WebkitTestSuite(name, root)
diff --git a/test/webkit/webkit.status b/test/webkit/webkit.status
new file mode 100644 (file)
index 0000000..f425364
--- /dev/null
@@ -0,0 +1,26 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+#       copyright notice, this list of conditions and the following
+#       disclaimer in the documentation and/or other materials provided
+#       with the distribution.
+#     * Neither the name of Google Inc. nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
index a16941b..a9a6203 100644 (file)
@@ -386,7 +386,7 @@ class ConvertNotation(object):
     self.init = True
 
   def CloseGlobal(self):
-    if not self.init: return
+    if not self.init: self.OpenGlobal()
     print >> self.out, "]"
     self.init = False