Best Python code snippet using fMBT_python
op-negate-inline-cache.js
Source:op-negate-inline-cache.js  
1"use strict"2function opaqueIdentity(arg) {3    return arg;4}5noInline(opaqueIdentity)6function negateWithDoubleSub(arg) {7    // Implement integer negate as a double sub operation.8    return opaqueIdentity(6.4 - arg) - 6.4;9}10noInline(negateWithDoubleSub)11function opaqueNonZeroIntegerNegate(arg)12{13    return -arg;14}15noInline(opaqueNonZeroIntegerNegate);16function testNonZeroInteger()17{18    for (let i = 1; i < 1e4; ++i) {19        if (opaqueNonZeroIntegerNegate(i) !== negateWithDoubleSub(i)) {20            throw "Failed testNonZeroInteger() at i = " + i;21        }22    }23}24testNonZeroInteger();25function opaqueDoubleNegate(arg)26{27    return -arg;28}29noInline(opaqueDoubleNegate);30function testDouble()31{32    for (let i = 0; i < 1e4; ++i) {33        if ((opaqueDoubleNegate(i + 0.5)) + 0.5 + i !== 0) {34            throw "Failed testDouble() at i = " + i;35        }36    }37}38testDouble();39function opaqueObjectNegate(arg)40{41    return -arg;42}43noInline(opaqueObjectNegate);44function testObject()45{46    for (let i = 0; i < 1e4; ++i) {47        if ((opaqueObjectNegate({ valueOf: ()=>{ return i + 0.5 }})) + 0.5 + i !== 0) {48            throw "Failed testObject() at i = " + i;49        }50    }51}52testObject();53function opaqueIntegerAndDoubleNegate(arg)54{55    return -arg;56}57noInline(opaqueIntegerAndDoubleNegate);58function testIntegerAndDouble()59{60    for (let i = 1; i < 1e4; ++i) {61        if ((opaqueIntegerAndDoubleNegate(i)) + i !== 0) {62            throw "Failed testIntegerAndDouble() on integers at i = " + i;63        }64        if ((opaqueIntegerAndDoubleNegate(i + 0.5)) + 0.5 + i !== 0) {65            throw "Failed testIntegerAndDouble() on double at i = " + i;66        }67    }68}69testIntegerAndDouble();70function opaqueIntegerThenDoubleNegate(arg)71{72    return -arg;73}74noInline(opaqueIntegerThenDoubleNegate);75function testIntegerThenDouble()76{77    for (let i = 1; i < 1e4; ++i) {78        if ((opaqueIntegerThenDoubleNegate(i)) + i !== 0) {79            throw "Failed testIntegerThenDouble() on integers at i = " + i;80        }81    }82    for (let i = 1; i < 1e4; ++i) {83        if ((opaqueIntegerThenDoubleNegate(i + 0.5)) + 0.5 + i !== 0) {84            throw "Failed testIntegerThenDouble() on double at i = " + i;85        }86    }87}88testIntegerThenDouble();89function opaqueDoubleThenIntegerNegate(arg)90{91    return -arg;92}93noInline(opaqueDoubleThenIntegerNegate);94function testDoubleThenInteger()95{96    for (let i = 1; i < 1e4; ++i) {97        if ((opaqueDoubleThenIntegerNegate(i + 0.5)) + 0.5 + i !== 0) {98            throw "Failed testDoubleThenInteger() on double at i = " + i;99        }100    }101    for (let i = 1; i < 1e4; ++i) {102        if ((opaqueDoubleThenIntegerNegate(i)) + i !== 0) {103            throw "Failed testDoubleThenInteger() on integers at i = " + i;104        }105    }106}107testDoubleThenInteger();108function opaqueIntegerAndObjectNegate(arg)109{110    return -arg;111}112noInline(opaqueIntegerAndObjectNegate);113function testIntegerAndObject()114{115    for (let i = 1; i < 1e4; ++i) {116        if ((opaqueIntegerAndObjectNegate(i)) + i !== 0) {117            throw "Failed testIntegerAndObject() on integers at i = " + i;118        }119        if ((opaqueIntegerAndObjectNegate({ valueOf: ()=>{ return i + 0.5 }})) + 0.5 + i !== 0) {120            throw "Failed testIntegerAndObject() on double at i = " + i;121        }122    }123}124testIntegerAndObject();125function opaqueDoubleAndObjectNegate(arg)126{127    return -arg;128}129noInline(opaqueDoubleAndObjectNegate);130function testDoubleAndObject()131{132    for (let i = 1; i < 1e4; ++i) {133        if ((opaqueDoubleAndObjectNegate(i + 0.5)) + i + 0.5 !== 0) {134            throw "Failed testDoubleAndObject() on integers at i = " + i;135        }136        if ((opaqueDoubleAndObjectNegate({ valueOf: ()=>{ return i }})) + i !== 0) {137            throw "Failed testDoubleAndObject() on double at i = " + i;138        }139    }140}141testDoubleAndObject();142function opaqueIntegerThenObjectNegate(arg)143{144    return -arg;145}146noInline(opaqueIntegerThenObjectNegate);147function testIntegerThenObject()148{149    for (let i = 1; i < 1e4; ++i) {150        if ((opaqueIntegerThenObjectNegate(i)) + i !== 0) {151            throw "Failed testIntegerThenObject() on integers at i = " + i;152        }153    }154    for (let i = 1; i < 1e4; ++i) {155        if ((opaqueIntegerThenObjectNegate({ valueOf: ()=>{ return i + 0.5 }})) + 0.5 + i !== 0) {156            throw "Failed testIntegerThenObject() on double at i = " + i;157        }158    }159}160testIntegerThenObject();161function opaqueDoubleThenObjectNegate(arg)162{163    return -arg;164}165noInline(opaqueDoubleThenObjectNegate);166function testDoubleThenObject()167{168    for (let i = 1; i < 1e4; ++i) {169        if ((opaqueDoubleThenObjectNegate(i + 0.5)) + i + 0.5 !== 0) {170            throw "Failed testDoubleThenObject() on integers at i = " + i;171        }172    }173    for (let i = 1; i < 1e4; ++i) {174        if ((opaqueDoubleThenObjectNegate(i + 0.5)) + i + 0.5 !== 0) {175            throw "Failed testDoubleThenObject() on integers at i = " + i;176        }177    }178}179testDoubleThenObject();180function opaqueIntegerAndDoubleAndObjectNegate(arg)181{182    return -arg;183}184noInline(opaqueIntegerAndDoubleAndObjectNegate);185function testIntegerAndDoubleAndObject()186{187    for (let i = 1; i < 1e4; ++i) {188        if ((opaqueIntegerAndDoubleAndObjectNegate(i)) + i !== 0) {189            throw "Failed testIntegerAndDoubleAndObject() on integers at i = " + i;190        }191        if ((opaqueIntegerAndDoubleAndObjectNegate(i + 0.5)) + i + 0.5 !== 0) {192            throw "Failed testIntegerAndDoubleAndObject() on integers at i = " + i;193        }194        if ((opaqueIntegerAndDoubleAndObjectNegate({ valueOf: ()=>{ return i }})) + i !== 0) {195            throw "Failed testIntegerAndDoubleAndObject() on double at i = " + i;196        }197    }198}199testIntegerAndDoubleAndObject();200function opaqueIntegerNegateOverflow(arg)201{202    return -arg;203}204noInline(opaqueIntegerNegateOverflow);205function testIntegerNegateOverflow()206{207    for (let i = 1; i < 1e4; ++i) {208        if (opaqueIntegerNegateOverflow(0x80000000|0) !== 2147483648) {209            throw "Failed opaqueIntegerNegateOverflow() at i = " + i;210        }211    }212}213testIntegerNegateOverflow();214function opaqueIntegerNegateZero(arg)215{216    return -arg;217}218noInline(opaqueIntegerNegateZero);219function testIntegerNegateZero()220{221    for (let i = 1; i < 1e4; ++i) {222        if (1 / opaqueIntegerNegateZero(0) !== -Infinity) {223            throw "Failed testIntegerNegateZero() at i = " + i;224        }225    }226}227testIntegerNegateZero();228function gatedNegate(selector, arg)229{230    if (selector === 0) {231        return -arg;232    }233    if (selector == 42) {234        return -arg;235    }236    return arg;237}238noInline(gatedNegate);239function testUnusedNegate()240{241    for (let i = 1; i < 1e2; ++i) {242        if (gatedNegate(Math.PI, i) !== i) {243            throw "Failed first phase of testUnusedNegate";244        }245    }246    for (let i = 1; i < 1e4; ++i) {247        if (gatedNegate(0, i) + i !== 0) {248            throw "Failed second phase of testUnusedNegate";249        }250    }251    for (let i = 1; i < 1e4; ++i) {252        if (gatedNegate(42, i + 0.5) + 0.5 + i !== 0) {253            throw "Failed third phase of testUnusedNegate";254        }255    }256}...common.py
Source:common.py  
1from peachpy import *2from peachpy.x86_64 import *3sqrt2_over_2 = float.fromhex("0x1.6A09E6p-1")4cos_1pi_over_8 = float.fromhex("0x1.D906BCp-1")5cos_3pi_over_8 = float.fromhex("0x1.87DE2Ap-2")6tan_1pi_over_8 = float.fromhex("0x1.A8279Ap-2")7tan_3pi_over_8 = float.fromhex("0x1.3504F4p+1")8cos_npi_over_8 = [9    1.0,10    cos_1pi_over_8,11    sqrt2_over_2,12    cos_3pi_over_8,13    0.0,14    -cos_3pi_over_8,15    -sqrt2_over_2,16    -cos_1pi_over_8,17]18cos_npi_over_4 = [19    1.0,20    sqrt2_over_2,21    0.0,22    -sqrt2_over_223]24sin_npi_over_8 = [25    0.0,26    cos_3pi_over_8,27    sqrt2_over_2,28    cos_1pi_over_8,29    1.0,30    cos_1pi_over_8,31    sqrt2_over_2,32    cos_3pi_over_833]34sin_npi_over_4 = [35    0.0,36    sqrt2_over_2,37    1.0,38    sqrt2_over_239]40def _MM_SHUFFLE(z, y, x, w):41    assert z & ~0b11 == 042    assert y & ~0b11 == 043    assert x & ~0b11 == 044    assert w & ~0b11 == 045    return (z << 6) | (y << 4) | (x << 2) | w46def _MM_SHUFFLE2(x, y):47    assert x & ~1 == 048    assert y & ~1 == 049    return (x << 1) | y50def butterfly(a, b, negate_a=False, negate_b=False, scale_a=None, scale_b=None, negate_out_b=False, writeback=True):51    assert isinstance(a, YMMRegister) or isinstance(a, LocalVariable) and a.size == YMMRegister.size52    assert isinstance(b, YMMRegister) or isinstance(b, LocalVariable) and b.size == YMMRegister.size53    assert isinstance(negate_a, bool)54    assert isinstance(negate_b, bool)55    assert isinstance(negate_out_b, bool)56    assert scale_b is None or \57        isinstance(scale_b, YMMRegister) or \58        isinstance(scale_b, (LocalVariable, Constant)) and scale_b.size == YMMRegister.size59    assert scale_a is None or \60        isinstance(scale_a, YMMRegister) or \61        isinstance(scale_a, (LocalVariable, Constant)) and scale_a.size == YMMRegister.size62    assert scale_a is None or scale_b is None63    assert isinstance(writeback, bool)64    assert not negate_out_b or not negate_a and not negate_b and scale_a is None and scale_b is None65    ymm_a, ymm_b = a, b66    if isinstance(a, LocalVariable):67        ymm_a = YMMRegister()68        VMOVAPS(ymm_a, a)69    if isinstance(b, LocalVariable):70        ymm_b = YMMRegister()71        VMOVAPS(ymm_b, b)72    if scale_b is None and scale_a is None:73        assert not negate_a, "Negation of a is supported only in combination with scaling"74        ymm_new_a = YMMRegister()75        VADDPS(ymm_new_a, ymm_a, ymm_b)76        ymm_new_b = YMMRegister()77        if not negate_out_b:78            VSUBPS(ymm_new_b, ymm_a, ymm_b)79        else:80            VSUBPS(ymm_new_b, ymm_b, ymm_a)81        if not negate_b:82            SWAP.REGISTERS(ymm_new_a, ymm_a)83            SWAP.REGISTERS(ymm_new_b, ymm_b)84        else:85            SWAP.REGISTERS(ymm_new_a, ymm_b)86            SWAP.REGISTERS(ymm_new_b, ymm_a)87    elif scale_a is not None:88        ymm_a_copy = YMMRegister()89        VMOVAPS(ymm_a_copy, ymm_a)90        if not negate_a and not negate_b:91            VFMADD132PS(ymm_a, ymm_b, scale_a)92            VFMSUB132PS(ymm_a_copy, ymm_b, scale_a)93        elif not negate_a and negate_b:94            VFMSUB132PS(ymm_a, ymm_b, scale_a)95            VFMADD132PS(ymm_a_copy, ymm_b, scale_a)96        elif negate_a and not negate_b:97            VFMMADD132PS(ymm_a, ymm_b, scale_a)98            VFNMSUB132PS(ymm_a_copy, ymm_b, scale_a)99        elif negate_a and negate_b:100            VFNMSUB132PS(ymm_a, ymm_b, scale_a)101            VFNMADD132PS(ymm_a_copy, ymm_b, scale_a)102        SWAP.REGISTERS(ymm_b, ymm_a_copy)103    elif scale_b is not None:104        ymm_a_copy = YMMRegister()105        VMOVAPS(ymm_a_copy, ymm_a)106        if not negate_a and not negate_b:107            VFMADD231PS(ymm_a, ymm_b, scale_b)108            VFNMADD231PS(ymm_a_copy, ymm_b, scale_b)109        elif not negate_a and negate_b:110            VFNMADD231PS(ymm_a, ymm_b, scale_b)111            VFMADD231PS(ymm_a_copy, ymm_b, scale_b)112        elif negate_a and not negate_b:113            VFMSUB231PS(ymm_a, ymm_b, scale_b)114            VFNMSUB231PS(ymm_a_copy, ymm_b, scale_b)115        elif negate_a and negate_b:116            VFNMSUB231PS(ymm_a, ymm_b, scale_b)117            VFMSUB231PS(ymm_a_copy, ymm_b, scale_b)118        SWAP.REGISTERS(ymm_b, ymm_a_copy)119    if writeback and isinstance(a, LocalVariable):120        VMOVAPS(a, ymm_a)121    if writeback and isinstance(b, LocalVariable):122        VMOVAPS(b, ymm_b)123    return ymm_a, ymm_b124def transpose2x2x128(ymm_a, ymm_b, use_blend=True):125    # ymm_a      = (a.lo, a.hi)126    # ymm_b      = (b.lo, b.hi)127    if use_blend:128        # ymm_ab = (a.hi, b.lo)129        ymm_ab = YMMRegister()130        VPERM2F128(ymm_ab, ymm_a, ymm_b, 0x21)131        # ymm_a  = (a.lo, b.lo)132        VBLENDPS(ymm_a, ymm_a, ymm_ab, 0xF0)133        # ymm_b  = (a.hi, b.hi)134        VBLENDPS(ymm_b, ymm_b, ymm_ab, 0x0F)135    else:136        # ymm_new_a = (a.lo, b.lo)137        ymm_new_a = YMMRegister()138        VINSERTF128(ymm_new_a, ymm_a, ymm_b.as_xmm, 1)139        # ymm_new_b = (a.hi, b.hi)140        ymm_new_b = YMMRegister()141        VPERM2F128(ymm_new_b, ymm_a, ymm_b, 0x31)142        SWAP.REGISTERS(ymm_a, ymm_new_a)143        SWAP.REGISTERS(ymm_b, ymm_new_b)144def transpose2x2x2x64(ymm_a, ymm_b, use_blend=True):145    # ymm_a      = (a0, a1, a2, a3)146    # ymm_b      = (b0, b1, a2, b3)147    if use_blend:148        # ymm_ab = (a1, b0, a3, b2)149        ymm_ab = YMMRegister()150        VSHUFPD(ymm_ab, ymm_a, ymm_b, 0b0101)151        # ymm_a  = (a0, b0, a2, b2)152        VBLENDPS(ymm_a, ymm_a, ymm_ab, 0b11001100)153        # ymm_b  = (a1, b1, a3, b3)154        VBLENDPS(ymm_b, ymm_b, ymm_ab, 0b00110011)155    else:156        # ymm_new_a = (a0, b0, a2, b2)157        ymm_new_a = YMMRegister()158        VUNPCKLPD(ymm_new_a, ymm_a, ymm_b)159        # ymm_new_b = (a1, b1, a3, b3)160        ymm_new_b = YMMRegister()161        VUNPCKHPD(ymm_new_b, ymm_a, ymm_b)162        SWAP.REGISTERS(ymm_a, ymm_new_a)163        SWAP.REGISTERS(ymm_b, ymm_new_b)164def compute_masks(masks, reg_column_offset, reg_column_count):165    assert isinstance(masks, list) and all(isinstance(mask, (YMMRegister, LocalVariable)) for mask in masks)166    assert isinstance(reg_column_offset, GeneralPurposeRegister64)167    assert isinstance(reg_column_count, GeneralPurposeRegister64)168    169def interleave(sequence_a, sequence_b):170    assert isinstance(sequence_a, list) and isinstance(sequence_b, list) or isinstance(sequence_a, tuple) and isinstance(sequence_b, tuple)171    if isinstance(sequence_a, list):172        return list(sum(zip(sequence_a, sequence_b), ()))173    else:...testData.js
Source:testData.js  
1// data that feeds jest tests 2const testUser1 = {3  userId: 'jjuy',4  userContext: {5    state: 'california',6    beta: true,7    age: 20,8    student: false,9  },10};11const testUser2 = {12  userId: 'yrc',13  userContext: {14    state: 'new jersey',15    beta: false,16    age: 19,17    student: true,18  },19};20const testUser3 = {21  userId: 'ahsu',22  userContext: {23    state: 'washington',24    age: 50,25    student: false,26  },27};28const users = [testUser1, testUser2, testUser3];29const testConditions = {30  trueValue: {31    negate: false,32    operator: 'EQ',33    attribute: 'beta',34    vals: ['true'],35  },36  falseValue: {37    negate: false,38    operator: 'EQ',39    attribute: 'beta',40    vals: ['false'],41  },42  eQstring: {43    negate: false,44    operator: 'EQ',45    attribute: 'state',46    vals: ['california'],47  },48  isInstring: {49    negate: false,50    operator: 'IN',51    attribute: 'state',52    vals: ['california', 'washington', 'oregon'],53  },54  strContains: {55    negate: false,56    operator: 'STR_CONTAINS',57    attribute: 'state',58    vals: ['california'],59  },60  strEndsWith: {61    negate: false,62    operator: 'STR_ENDS_WITH',63    attribute: 'state',64    vals: ['california'],65  },66  strStartsWith: {67    negate: false,68    operator: 'STR_STARTS_WITH',69    attribute: 'state',70    vals: ['california'],71  },72  lessThanOrEqualTo20: {73    negate: false,74    operator: 'LT_EQ',75    attribute: 'age',76    vals: ['20'],77  },78  equalTo20: {79    negate: false,80    operator: 'EQ',81    attribute: 'age',82    vals: ['20'],83  },84  lessThan20: {85    negate: false,86    operator: 'LT',87    attribute: 'age',88    vals: ['20'],89  },90  greaterThan20: {91    negate: false,92    operator: 'GT',93    attribute: 'age',94    vals: ['20'],95  },96  greaterThanOrEqualTo: {97    negate: false,98    operator: 'GT_EQ',99    attribute: 'age',100    vals: ['20'],101  },102};103const data = {104  sdkKeys: {105    'c3e-db3100c-8': true,106    'de9-6bf1a0c-3': true,107    'fa4-d731f0e-4': true,108  },109  flags: {110    'beta-flag': {111      beta_testers: {112        combine: 'ANY',113        conditions: [114          {115            negate: false,116            operator: 'EQ',117            attribute: 'beta',118            vals: ['true'],119          },120        ],121      },122      status: true,123    },124    'not-beta-flag': {125      beta_testers: {126        combine: 'ANY',127        conditions: [128          {129            negate: true,130            operator: 'EQ',131            attribute: 'beta',132            vals: ['true'],133          },134        ],135      },136      status: true,137    },138    'toggled-off-flag-all': {139      status: false,140    },141    'toggled-on-flag-all': {142      status: true,143    },144    'cali-or-student': {145      california_students: {146        combine: 'ANY',147        conditions: [148          {149            negate: false,150            operator: 'EQ',151            attribute: 'state',152            vals: ['california'],153          },154          {155            negate: false,156            operator: 'EQ',157            attribute: 'student',158            vals: ['true'],159          },160        ],161      },162      status: true,163    },164    'cali-and-student': {165      california_students: {166        combine: 'AND',167        conditions: [168          {169            negate: false,170            operator: 'EQ',171            attribute: 'state',172            vals: ['california'],173          },174          {175            negate: false,176            operator: 'EQ',177            attribute: 'student',178            vals: ['true'],179          },180        ],181      },182      status: true,183    },184    'not-cali-nor-student': {185      california_students: {186        combine: 'AND',187        conditions: [188          {189            negate: true,190            operator: 'EQ',191            attribute: 'state',192            vals: ['california'],193          },194          {195            negate: true,196            operator: 'EQ',197            attribute: 'student',198            vals: ['true'],199          },200        ],201      },202      status: true,203    },204    'non-cali-student': {205      california_students: {206        combine: 'AND',207        conditions: [208          {209            negate: true,210            operator: 'EQ',211            attribute: 'state',212            vals: ['california'],213          },214          {215            negate: false,216            operator: 'EQ',217            attribute: 'student',218            vals: ['true'],219          },220        ],221      },222      status: true,223    },224    'qa-user-ids': {225      qa_users: {226        combine: 'ANY',227        conditions: [228          {229            negate: false,230            operator: 'IN',231            attribute: 'userId',232            vals: ['jjuy', 'yrc', 'ahsu'],233          },234        ],235      },236      status: true,237    },238    'userId-contains': {239      qa_users: {240        combine: 'ANY',241        conditions: [242          {243            negate: false,244            operator: 'STR_CONTAINS',245            attribute: 'userId',246            vals: ['u'],247          },248        ],249      },250      status: true,251    },252    'older-than-20': {253      adults: {254        combine: 'ANY',255        conditions: [256          {257            negate: false,258            operator: 'GT',259            attribute: 'age',260            vals: [20],261          },262        ],263      },264      status: true,265    },266    'less-than-or-eq-20': {267      adults: {268        combine: 'ANY',269        conditions: [270          {271            negate: false,272            operator: 'LT_EQ',273            attribute: 'age',274            vals: [20],275          },276        ],277      },278      status: true,279    },280  },281};282module.exports = {283  data,284  users,285  testUser1,286  testUser2,287  testUser3,288  testConditions,...modular_negate_test.py
Source:modular_negate_test.py  
...40    decomposition_to_ascii,41    cover,42    check_permutation_decomposition,43)44def test_toffoli_size_of_modular_negate():45    rec = DummyEngine(save_commands=True)46    eng = MainEngine(backend=rec, engine_list=[47        AutoReplacerEx(DecompositionRuleSet(modules=[48            swap2cnot,49            multi_not_rules,50            addition_rules,51            increment_rules,52            pivot_flip_rules,53            offset_rules,54            comparison_rules,55            modular_negate_rules,56        ])),57        LimitedCapabilityEngine(58            allow_toffoli=True,59        ),60    ])61    t = eng.allocate_qureg(5)62    controls = eng.allocate_qureg(1)63    workspace = eng.allocate_qureg(2)64    modulus = 2965    ModularNegate(modulus) & controls | t66    assert 100 < len(rec.received_commands) < 20067    assert workspace is not None68def test_bimultiplication_operation():69    assert ModularNegate(13).do_operation(0) == (0,)70    assert ModularNegate(13).do_operation(1) == (12,)71    assert ModularNegate(13).do_operation(2) == (11,)72    assert ModularNegate(13).do_operation(11) == (2,)73    assert ModularNegate(13).do_operation(12) == (1,)74    assert ModularNegate(13).do_operation(13) == (13,)75    assert ModularNegate(13).do_operation(14) == (14,)76def test_decompose_modular_negate():77    for register_size in cover(100, min=1):78        for control_size in cover(3):79            for h_modulus in cover(1 << register_size):80                modulus = h_modulus + 181                check_permutation_decomposition(82                    decomposition_rule=decompose_modular_negate,83                    gate=ModularNegate(modulus),84                    register_sizes=[register_size],85                    control_size=control_size,86                    register_limits=[modulus])87def test_diagram_decompose_modular_negate():88    text_diagram = decomposition_to_ascii(89        gate=ModularNegate(13),90        decomposition_rule=decompose_modular_negate,91        register_sizes=[4],92        control_size=1)93    print(text_diagram)94    assert text_diagram == """95|0>----------------@----------------96    .------. .-----|-----. .------.97|0>-|      |-|           |-|      |-98    |      | |           | |      |99|0>-|      |-|           |-|      |-100    |      | |           | |      |101|0>-|  â1  |-|  Flip<12  |-|  +1  |-...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
