gx
chenyc
2025-06-12 7b72ac13a83764a662159d4a49b7fffb90476ecb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/**
 * @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.
 * =============================================================================
 */
import * as device_util from './device_util';
import * as tf from './index';
describe('DEBUG', () => {
    beforeEach(() => {
        tf.env().reset();
        spyOn(console, 'warn').and.callFake((msg) => { });
    });
    afterAll(() => tf.env().reset());
    it('disabled by default', () => {
        expect(tf.env().getBool('DEBUG')).toBe(false);
    });
    it('warns when enabled', () => {
        const consoleWarnSpy = console.warn;
        tf.env().set('DEBUG', true);
        expect(consoleWarnSpy.calls.count()).toBe(1);
        expect(consoleWarnSpy.calls.first().args[0]
            .startsWith('Debugging mode is ON. '))
            .toBe(true);
        expect(tf.env().getBool('DEBUG')).toBe(true);
        expect(consoleWarnSpy.calls.count()).toBe(1);
    });
});
// TODO (yassogba) figure out why this spy is not working / fix this test.
describe('IS_BROWSER', () => {
    let isBrowser;
    beforeEach(() => {
        tf.env().reset();
        spyOn(device_util, 'isBrowser').and.callFake(() => isBrowser);
    });
    afterAll(() => tf.env().reset());
    // tslint:disable-next-line: ban
    xit('isBrowser: true', () => {
        isBrowser = true;
        expect(tf.env().getBool('IS_BROWSER')).toBe(true);
    });
    // tslint:disable-next-line: ban
    xit('isBrowser: false', () => {
        isBrowser = false;
        expect(tf.env().getBool('IS_BROWSER')).toBe(false);
    });
});
describe('PROD', () => {
    beforeEach(() => tf.env().reset());
    afterAll(() => tf.env().reset());
    it('disabled by default', () => {
        expect(tf.env().getBool('PROD')).toBe(false);
    });
});
describe('TENSORLIKE_CHECK_SHAPE_CONSISTENCY', () => {
    beforeEach(() => tf.env().reset());
    afterAll(() => tf.env().reset());
    it('disabled when debug is disabled', () => {
        tf.env().set('DEBUG', false);
        expect(tf.env().getBool('TENSORLIKE_CHECK_SHAPE_CONSISTENCY')).toBe(false);
    });
    it('enabled when debug is enabled', () => {
        // Silence debug warnings.
        spyOn(console, 'warn');
        tf.enableDebugMode();
        expect(tf.env().getBool('TENSORLIKE_CHECK_SHAPE_CONSISTENCY')).toBe(true);
    });
});
describe('DEPRECATION_WARNINGS_ENABLED', () => {
    beforeEach(() => tf.env().reset());
    afterAll(() => tf.env().reset());
    it('enabled by default', () => {
        expect(tf.env().getBool('DEPRECATION_WARNINGS_ENABLED')).toBe(true);
    });
});
describe('IS_TEST', () => {
    beforeEach(() => tf.env().reset());
    afterAll(() => tf.env().reset());
    it('disabled by default', () => {
        expect(tf.env().getBool('IS_TEST')).toBe(false);
    });
});
describe('async flags test', () => {
    const asyncFlagName = 'ASYNC_FLAG';
    beforeEach(() => tf.env().registerFlag(asyncFlagName, async () => true));
    afterEach(() => tf.env().reset());
    it('evaluating async flag works', async () => {
        const flagVal = await tf.env().getAsync(asyncFlagName);
        expect(flagVal).toBe(true);
    });
    it('evaluating async flag synchronously fails', async () => {
        expect(() => tf.env().get(asyncFlagName)).toThrow();
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3NfdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvZmxhZ3NfdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEtBQUssV0FBVyxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU5QixRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtJQUNyQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDSCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFakMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUM3QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDNUIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQW1CLENBQUM7UUFDbkQsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FB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QUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUM3QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUM7SUFDbkMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUV6RSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFbEMsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0ICogYXMgZGV2aWNlX3V0aWwgZnJvbSAnLi9kZXZpY2VfdXRpbCc7XG5pbXBvcnQgKiBhcyB0ZiBmcm9tICcuL2luZGV4JztcblxuZGVzY3JpYmUoJ0RFQlVHJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0Zi5lbnYoKS5yZXNldCgpO1xuICAgIHNweU9uKGNvbnNvbGUsICd3YXJuJykuYW5kLmNhbGxGYWtlKChtc2c6IHN0cmluZykgPT4ge30pO1xuICB9KTtcbiAgYWZ0ZXJBbGwoKCkgPT4gdGYuZW52KCkucmVzZXQoKSk7XG5cbiAgaXQoJ2Rpc2FibGVkIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHRmLmVudigpLmdldEJvb2woJ0RFQlVHJykpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnd2FybnMgd2hlbiBlbmFibGVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGNvbnNvbGVXYXJuU3B5ID0gY29uc29sZS53YXJuIGFzIGphc21pbmUuU3B5O1xuICAgIHRmLmVudigpLnNldCgnREVCVUcnLCB0cnVlKTtcbiAgICBleHBlY3QoY29uc29sZVdhcm5TcHkuY2FsbHMuY291bnQoKSkudG9CZSgxKTtcbiAgICBleHBlY3QoKGNvbnNvbGVXYXJuU3B5LmNhbGxzLmZpcnN0KCkuYXJnc1swXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAuc3RhcnRzV2l0aCgnRGVidWdnaW5nIG1vZGUgaXMgT04uICcpKVxuICAgICAgICAudG9CZSh0cnVlKTtcblxuICAgIGV4cGVjdCh0Zi5lbnYoKS5nZXRCb29sKCdERUJVRycpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChjb25zb2xlV2FyblNweS5jYWxscy5jb3VudCgpKS50b0JlKDEpO1xuICB9KTtcbn0pO1xuXG4vLyBUT0RPICh5YXNzb2diYSkgZmlndXJlIG91dCB3aHkgdGhpcyBzcHkgaXMgbm90IHdvcmtpbmcgLyBmaXggdGhpcyB0ZXN0LlxuZGVzY3JpYmUoJ0lTX0JST1dTRVInLCAoKSA9PiB7XG4gIGxldCBpc0Jyb3dzZXI6IGJvb2xlYW47XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHRmLmVudigpLnJlc2V0KCk7XG4gICAgc3B5T24oZGV2aWNlX3V0aWwsICdpc0Jyb3dzZXInKS5hbmQuY2FsbEZha2UoKCkgPT4gaXNCcm93c2VyKTtcbiAgfSk7XG4gIGFmdGVyQWxsKCgpID0+IHRmLmVudigpLnJlc2V0KCkpO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYmFuXG4gIHhpdCgnaXNCcm93c2VyOiB0cnVlJywgKCkgPT4ge1xuICAgIGlzQnJvd3NlciA9IHRydWU7XG4gICAgZXhwZWN0KHRmLmVudigpLmdldEJvb2woJ0lTX0JST1dTRVInKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBiYW5cbiAgeGl0KCdpc0Jyb3dzZXI6IGZhbHNlJywgKCkgPT4ge1xuICAgIGlzQnJvd3NlciA9IGZhbHNlO1xuICAgIGV4cGVjdCh0Zi5lbnYoKS5nZXRCb29sKCdJU19CUk9XU0VSJykpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnUFJPRCcsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB0Zi5lbnYoKS5yZXNldCgpKTtcbiAgYWZ0ZXJBbGwoKCkgPT4gdGYuZW52KCkucmVzZXQoKSk7XG5cbiAgaXQoJ2Rpc2FibGVkIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHRmLmVudigpLmdldEJvb2woJ1BST0QnKSkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdURU5TT1JMSUtFX0NIRUNLX1NIQVBFX0NPTlNJU1RFTkNZJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHRmLmVudigpLnJlc2V0KCkpO1xuICBhZnRlckFsbCgoKSA9PiB0Zi5lbnYoKS5yZXNldCgpKTtcblxuICBpdCgnZGlzYWJsZWQgd2hlbiBkZWJ1ZyBpcyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICB0Zi5lbnYoKS5zZXQoJ0RFQlVHJywgZmFsc2UpO1xuICAgIGV4cGVjdCh0Zi5lbnYoKS5nZXRCb29sKCdURU5TT1JMSUtFX0NIRUNLX1NIQVBFX0NPTlNJU1RFTkNZJykpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnZW5hYmxlZCB3aGVuIGRlYnVnIGlzIGVuYWJsZWQnLCAoKSA9PiB7XG4gICAgLy8gU2lsZW5jZSBkZWJ1ZyB3YXJuaW5ncy5cbiAgICBzcHlPbihjb25zb2xlLCAnd2FybicpO1xuICAgIHRmLmVuYWJsZURlYnVnTW9kZSgpO1xuICAgIGV4cGVjdCh0Zi5lbnYoKS5nZXRCb29sKCdURU5TT1JMSUtFX0NIRUNLX1NIQVBFX0NPTlNJU1RFTkNZJykpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdERVBSRUNBVElPTl9XQVJOSU5HU19FTkFCTEVEJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHRmLmVudigpLnJlc2V0KCkpO1xuICBhZnRlckFsbCgoKSA9PiB0Zi5lbnYoKS5yZXNldCgpKTtcblxuICBpdCgnZW5hYmxlZCBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgIGV4cGVjdCh0Zi5lbnYoKS5nZXRCb29sKCdERVBSRUNBVElPTl9XQVJOSU5HU19FTkFCTEVEJykpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdJU19URVNUJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHRmLmVudigpLnJlc2V0KCkpO1xuICBhZnRlckFsbCgoKSA9PiB0Zi5lbnYoKS5yZXNldCgpKTtcblxuICBpdCgnZGlzYWJsZWQgYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgICBleHBlY3QodGYuZW52KCkuZ2V0Qm9vbCgnSVNfVEVTVCcpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2FzeW5jIGZsYWdzIHRlc3QnLCAoKSA9PiB7XG4gIGNvbnN0IGFzeW5jRmxhZ05hbWUgPSAnQVNZTkNfRkxBRyc7XG4gIGJlZm9yZUVhY2goKCkgPT4gdGYuZW52KCkucmVnaXN0ZXJGbGFnKGFzeW5jRmxhZ05hbWUsIGFzeW5jICgpID0+IHRydWUpKTtcblxuICBhZnRlckVhY2goKCkgPT4gdGYuZW52KCkucmVzZXQoKSk7XG5cbiAgaXQoJ2V2YWx1YXRpbmcgYXN5bmMgZmxhZyB3b3JrcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmbGFnVmFsID0gYXdhaXQgdGYuZW52KCkuZ2V0QXN5bmMoYXN5bmNGbGFnTmFtZSk7XG4gICAgZXhwZWN0KGZsYWdWYWwpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdldmFsdWF0aW5nIGFzeW5jIGZsYWcgc3luY2hyb25vdXNseSBmYWlscycsIGFzeW5jICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gdGYuZW52KCkuZ2V0KGFzeW5jRmxhZ05hbWUpKS50b1Rocm93KCk7XG4gIH0pO1xufSk7XG4iXX0=