/** * @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * This file tests that we don't have any dataSyncs in the unconstrainted tests * so that we can run backends that have async init and async data reads against * our exported test files. */ // Use require here to workaround this being a circular dependency. // This should only be done in tests. // tslint:disable-next-line: no-require-imports require('@tensorflow/tfjs-backend-cpu'); import './index'; import './public/chained_ops/register_all_chained_ops'; import './register_all_gradients'; import { setTestEnvs } from './jasmine_util'; import { registerBackend, engine } from './globals'; import { KernelBackend } from './backends/backend'; import { getKernelsForBackend, registerKernel } from './kernel_registry'; // tslint:disable-next-line:no-require-imports const jasmine = require('jasmine'); process.on('unhandledRejection', e => { throw e; }); class AsyncCPUBackend extends KernelBackend { } const asyncBackend = new AsyncCPUBackend(); // backend is cast as any so that we can access methods through bracket // notation. const backend = engine().findBackend('cpu'); const proxyBackend = new Proxy(asyncBackend, { get(target, name, receiver) { if (name === 'readSync') { throw new Error(`Found dataSync() in a unit test. This is disabled so unit tests ` + `can run in backends that only support async data. Please use ` + `.data() in unit tests or if you truly are testing dataSync(), ` + `constrain your test with SYNC_BACKEND_ENVS`); } //@ts-ignore; const origSymbol = backend[name]; if (typeof origSymbol === 'function') { // tslint:disable-next-line:no-any return (...args) => { return origSymbol.apply(backend, args); }; } else { return origSymbol; } } }); const proxyBackendName = 'test-async-cpu'; // The registration is async on purpose, so we know our testing infra works // with backends that have async init (e.g. WASM and WebGPU). registerBackend(proxyBackendName, async () => proxyBackend); // All the kernels are registered under the 'cpu' name, so we need to // register them also under the proxy backend name. const kernels = getKernelsForBackend('cpu'); kernels.forEach(({ kernelName, kernelFunc, setupFunc }) => { registerKernel({ kernelName, backendName: proxyBackendName, kernelFunc, setupFunc }); }); setTestEnvs([{ name: proxyBackendName, backendName: proxyBackendName, isDataSync: false, }]); const runner = new jasmine(); runner.loadConfig({ spec_files: ['tfjs-core/src/**/**_test.js'], random: false }); runner.execute(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9hc3luY19iYWNrZW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvdGVzdF9hc3luY19iYWNrZW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSDs7OztHQUlHO0FBRUgsbUVBQW1FO0FBQ25FLHFDQUFxQztBQUNyQywrQ0FBK0M7QUFDL0MsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDeEMsT0FBTyxTQUFTLENBQUM7QUFDakIsT0FBTywrQ0FBK0MsQ0FBQztBQUN2RCxPQUFPLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFFLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFDLG9CQUFvQixFQUFFLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXZFLDhDQUE4QztBQUM5QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFbkMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNuQyxNQUFNLENBQUMsQ0FBQztBQUNWLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxlQUFnQixTQUFRLGFBQWE7Q0FBRztBQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0FBRTNDLHVFQUF1RTtBQUN2RSxZQUFZO0FBQ1osTUFBTSxPQUFPLEdBQWtCLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRCxNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7SUFDM0MsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUTtRQUN4QixJQUFJLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDWCxrRUFBa0U7Z0JBQ2xFLCtEQUErRDtnQkFDL0QsZ0VBQWdFO2dCQUNoRSw0Q0FBNEMsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsYUFBYTtRQUNiLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sVUFBVSxLQUFLLFVBQVUsRUFBRTtZQUNwQyxrQ0FBa0M7WUFDbEMsT0FBTyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUU7Z0JBQ3hCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sVUFBVSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFFMUMsMkVBQTJFO0FBQzNFLDZEQUE2RDtBQUM3RCxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUU1RCxxRUFBcUU7QUFDckUsbURBQW1EO0FBQ25ELE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLEVBQUUsRUFBRTtJQUN0RCxjQUFjLENBQ1YsRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQyxDQUFDO0FBRUgsV0FBVyxDQUFDLENBQUM7UUFDWCxJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0IsVUFBVSxFQUFFLEtBQUs7S0FDbEIsQ0FBQyxDQUFDLENBQUM7QUFFSixNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRTdCLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0FBQ2hGLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbi8qKlxuICogVGhpcyBmaWxlIHRlc3RzIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YVN5bmNzIGluIHRoZSB1bmNvbnN0cmFpbnRlZCB0ZXN0c1xuICogc28gdGhhdCB3ZSBjYW4gcnVuIGJhY2tlbmRzIHRoYXQgaGF2ZSBhc3luYyBpbml0IGFuZCBhc3luYyBkYXRhIHJlYWRzIGFnYWluc3RcbiAqIG91ciBleHBvcnRlZCB0ZXN0IGZpbGVzLlxuICovXG5cbi8vIFVzZSByZXF1aXJlIGhlcmUgdG8gd29ya2Fyb3VuZCB0aGlzIGJlaW5nIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS5cbi8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgZG9uZSBpbiB0ZXN0cy5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tcmVxdWlyZS1pbXBvcnRzXG5yZXF1aXJlKCdAdGVuc29yZmxvdy90ZmpzLWJhY2tlbmQtY3B1Jyk7XG5pbXBvcnQgJy4vaW5kZXgnO1xuaW1wb3J0ICcuL3B1YmxpYy9jaGFpbmVkX29wcy9yZWdpc3Rlcl9hbGxfY2hhaW5lZF9vcHMnO1xuaW1wb3J0ICcuL3JlZ2lzdGVyX2FsbF9ncmFkaWVudHMnO1xuaW1wb3J0IHtzZXRUZXN0RW52c30gZnJvbSAnLi9qYXNtaW5lX3V0aWwnO1xuaW1wb3J0IHtyZWdpc3RlckJhY2tlbmQsIGVuZ2luZX0gZnJvbSAnLi9nbG9iYWxzJztcbmltcG9ydCB7S2VybmVsQmFja2VuZH0gZnJvbSAnLi9iYWNrZW5kcy9iYWNrZW5kJztcbmltcG9ydCB7Z2V0S2VybmVsc0ZvckJhY2tlbmQsIHJlZ2lzdGVyS2VybmVsfSBmcm9tICcuL2tlcm5lbF9yZWdpc3RyeSc7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IGphc21pbmUgPSByZXF1aXJlKCdqYXNtaW5lJyk7XG5cbnByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIGUgPT4ge1xuICB0aHJvdyBlO1xufSk7XG5cbmNsYXNzIEFzeW5jQ1BVQmFja2VuZCBleHRlbmRzIEtlcm5lbEJhY2tlbmQge31cbmNvbnN0IGFzeW5jQmFja2VuZCA9IG5ldyBBc3luY0NQVUJhY2tlbmQoKTtcblxuLy8gYmFja2VuZCBpcyBjYXN0IGFzIGFueSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgbWV0aG9kcyB0aHJvdWdoIGJyYWNrZXRcbi8vIG5vdGF0aW9uLlxuY29uc3QgYmFja2VuZDogS2VybmVsQmFja2VuZCA9IGVuZ2luZSgpLmZpbmRCYWNrZW5kKCdjcHUnKTtcbmNvbnN0IHByb3h5QmFja2VuZCA9IG5ldyBQcm94eShhc3luY0JhY2tlbmQsIHtcbiAgZ2V0KHRhcmdldCwgbmFtZSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAobmFtZSA9PT0gJ3JlYWRTeW5jJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGb3VuZCBkYXRhU3luYygpIGluIGEgdW5pdCB0ZXN0LiBUaGlzIGlzIGRpc2FibGVkIHNvIHVuaXQgdGVzdHMgYCArXG4gICAgICAgICAgYGNhbiBydW4gaW4gYmFja2VuZHMgdGhhdCBvbmx5IHN1cHBvcnQgYXN5bmMgZGF0YS4gUGxlYXNlIHVzZSBgICtcbiAgICAgICAgICBgLmRhdGEoKSBpbiB1bml0IHRlc3RzIG9yIGlmIHlvdSB0cnVseSBhcmUgdGVzdGluZyBkYXRhU3luYygpLCBgICtcbiAgICAgICAgICBgY29uc3RyYWluIHlvdXIgdGVzdCB3aXRoIFNZTkNfQkFDS0VORF9FTlZTYCk7XG4gICAgfVxuICAgIC8vQHRzLWlnbm9yZTtcbiAgICBjb25zdCBvcmlnU3ltYm9sID0gYmFja2VuZFtuYW1lXTtcbiAgICBpZiAodHlwZW9mIG9yaWdTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgIHJldHVybiAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgcmV0dXJuIG9yaWdTeW1ib2wuYXBwbHkoYmFja2VuZCwgYXJncyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3JpZ1N5bWJvbDtcbiAgICB9XG4gIH1cbn0pO1xuXG5jb25zdCBwcm94eUJhY2tlbmROYW1lID0gJ3Rlc3QtYXN5bmMtY3B1JztcblxuLy8gVGhlIHJlZ2lzdHJhdGlvbiBpcyBhc3luYyBvbiBwdXJwb3NlLCBzbyB3ZSBrbm93IG91ciB0ZXN0aW5nIGluZnJhIHdvcmtzXG4vLyB3aXRoIGJhY2tlbmRzIHRoYXQgaGF2ZSBhc3luYyBpbml0IChlLmcuIFdBU00gYW5kIFdlYkdQVSkuXG5yZWdpc3RlckJhY2tlbmQocHJveHlCYWNrZW5kTmFtZSwgYXN5bmMgKCkgPT4gcHJveHlCYWNrZW5kKTtcblxuLy8gQWxsIHRoZSBrZXJuZWxzIGFyZSByZWdpc3RlcmVkIHVuZGVyIHRoZSAnY3B1JyBuYW1lLCBzbyB3ZSBuZWVkIHRvXG4vLyByZWdpc3RlciB0aGVtIGFsc28gdW5kZXIgdGhlIHByb3h5IGJhY2tlbmQgbmFtZS5cbmNvbnN0IGtlcm5lbHMgPSBnZXRLZXJuZWxzRm9yQmFja2VuZCgnY3B1Jyk7XG5rZXJuZWxzLmZvckVhY2goKHtrZXJuZWxOYW1lLCBrZXJuZWxGdW5jLCBzZXR1cEZ1bmN9KSA9PiB7XG4gIHJlZ2lzdGVyS2VybmVsKFxuICAgICAge2tlcm5lbE5hbWUsIGJhY2tlbmROYW1lOiBwcm94eUJhY2tlbmROYW1lLCBrZXJuZWxGdW5jLCBzZXR1cEZ1bmN9KTtcbn0pO1xuXG5zZXRUZXN0RW52cyhbe1xuICBuYW1lOiBwcm94eUJhY2tlbmROYW1lLFxuICBiYWNrZW5kTmFtZTogcHJveHlCYWNrZW5kTmFtZSxcbiAgaXNEYXRhU3luYzogZmFsc2UsXG59XSk7XG5cbmNvbnN0IHJ1bm5lciA9IG5ldyBqYXNtaW5lKCk7XG5cbnJ1bm5lci5sb2FkQ29uZmlnKHtzcGVjX2ZpbGVzOiBbJ3RmanMtY29yZS9zcmMvKiovKipfdGVzdC5qcyddLCByYW5kb206IGZhbHNlfSk7XG5ydW5uZXIuZXhlY3V0ZSgpO1xuIl19