The document provides sample code examples for key Node.js concepts including prototype-based object-oriented programming, asynchronous programming with callbacks, promises, and async/await, automated testing with Mocha and Chai, and using TypeScript with Node.js. The examples cover topics such as object prototypes, classes, timers, promises, generator functions, generics, and writing automated tests. Useful links are also provided for further learning Node.js, asynchronous programming, testing, and TypeScript.
SIMD machines — machines capable of evaluating the same instruction on several elements of data in parallel — are nowadays commonplace and diverse, be it in supercomputers, desktop computers or even mobile ones. Numerous tools and libraries can make use of that technology to speed up their computations, yet it could be argued that there is no library that provides a satisfying minimalistic, high-level and platform-agnostic interface for the C++ developer.
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
What do threads, atomic variables, mutexes, and conditional variables have in common? They are the basic building blocks of any concurrent application in C++, which are even for the experienced C++ programmers a big challenge. This massively changed with C++17 and change even more with C++20/23. What did we get with C++17, what can we hope for with C++20/23? With C++17, most of the standard template library algorithms are available in sequential, parallel, and vectorised variants. With the upcoming standards, we can look forward to executors, transactional memory, significantly improved futures and coroutines. To make it short. These are just the highlights from the concurrent and parallel perspective. Thus there is the hope that in the future C++ abstractions such as executors, transactional memory, futures and coroutines are used and that threads, atomic variables, mutexes and condition variables are just implementation details.
NativeBoost is a library that allows Pharo code to interface with native code written in C/C++. It provides functions for calling external functions, handling basic data types, and working with structures. The tutorial demonstrates how to use NativeBoost to interface with the Chipmunk physics library from within Pharo. It shows defining types for structures like vectors, calling functions, and dealing with indirect function calls through pointers. Understanding native libraries, data types, and structures is necessary to interface Pharo with external C code using NativeBoost.
The document analyzes potential issues found by PVS-Studio in various KDE projects and libraries. It identifies several types of issues, including expressions that are always true or false, unsafe pointer usage before validation, missing keywords that could alter program logic, and unsafe realloc() usage. A total of 27 specific code fragments are highlighted across the different libraries and applications as demonstrating these kinds of issues.
Twisted is an event-driven networking engine written in Python. It provides tools for developing asynchronous network applications and services. Some key features of Twisted include an asynchronous reactor framework, support for deferreds/promises, common network protocols and services implemented, and application framework for building services.
The JVM JIT compiler and deoptimizer are triggered under certain conditions like method invocation counts, changes in program behavior, and hot spots. The JIT initially compiles code to generate fast machine instructions while the deoptimizer reverts back to interpreted execution if needed.
The document discusses different approaches to implementing GPU-like programming on CPUs using C++AMP. It covers using setjmp/longjmp to implement coroutines for "fake threading", using ucontext for coroutine context switching, and how to pass lambda functions and non-integer arguments to makecontext. Implementing barriers on CPUs requires synchronizing threads with an atomic counter instead of GPU shared memory. Overall, the document shows it is possible to run GPU-like programming models on CPUs by simulating the GPU programming model using language features for coroutines and threading.
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014Fantix King 王川
This document discusses Python asynchronous concurrency frameworks and their future. It compares Twisted, Tornado, Gevent, and the new asyncio module. Twisted and Tornado use callbacks while Gevent uses greenlets. asyncio aims to provide an event loop like Twisted. It also introduces coroutines, tasks, and futures. The document argues that asyncio could serve as a common event loop that existing frameworks adapt to for better interoperability in the future.
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Sergey Platonov
This document discusses using functional programming concepts like comonads to design and implement cellular automata in C++. It describes a 1D, 3-state cellular automaton as a proof of concept. It then discusses extending the approach to 2D cellular automata by using higher-order functions. Benchmark results show the parallel implementation of Conway's Game of Life outperforms the sequential version.
SIMD machines — machines capable of evaluating the same instruction on several elements of data in parallel — are nowadays commonplace and diverse, be it in supercomputers, desktop computers or even mobile ones. Numerous tools and libraries can make use of that technology to speed up their computations, yet it could be argued that there is no library that provides a satisfying minimalistic, high-level and platform-agnostic interface for the C++ developer.
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...corehard_by
What do threads, atomic variables, mutexes, and conditional variables have in common? They are the basic building blocks of any concurrent application in C++, which are even for the experienced C++ programmers a big challenge. This massively changed with C++17 and change even more with C++20/23. What did we get with C++17, what can we hope for with C++20/23? With C++17, most of the standard template library algorithms are available in sequential, parallel, and vectorised variants. With the upcoming standards, we can look forward to executors, transactional memory, significantly improved futures and coroutines. To make it short. These are just the highlights from the concurrent and parallel perspective. Thus there is the hope that in the future C++ abstractions such as executors, transactional memory, futures and coroutines are used and that threads, atomic variables, mutexes and condition variables are just implementation details.
NativeBoost is a library that allows Pharo code to interface with native code written in C/C++. It provides functions for calling external functions, handling basic data types, and working with structures. The tutorial demonstrates how to use NativeBoost to interface with the Chipmunk physics library from within Pharo. It shows defining types for structures like vectors, calling functions, and dealing with indirect function calls through pointers. Understanding native libraries, data types, and structures is necessary to interface Pharo with external C code using NativeBoost.
The document analyzes potential issues found by PVS-Studio in various KDE projects and libraries. It identifies several types of issues, including expressions that are always true or false, unsafe pointer usage before validation, missing keywords that could alter program logic, and unsafe realloc() usage. A total of 27 specific code fragments are highlighted across the different libraries and applications as demonstrating these kinds of issues.
Twisted is an event-driven networking engine written in Python. It provides tools for developing asynchronous network applications and services. Some key features of Twisted include an asynchronous reactor framework, support for deferreds/promises, common network protocols and services implemented, and application framework for building services.
The JVM JIT compiler and deoptimizer are triggered under certain conditions like method invocation counts, changes in program behavior, and hot spots. The JIT initially compiles code to generate fast machine instructions while the deoptimizer reverts back to interpreted execution if needed.
The document discusses different approaches to implementing GPU-like programming on CPUs using C++AMP. It covers using setjmp/longjmp to implement coroutines for "fake threading", using ucontext for coroutine context switching, and how to pass lambda functions and non-integer arguments to makecontext. Implementing barriers on CPUs requires synchronizing threads with an atomic counter instead of GPU shared memory. Overall, the document shows it is possible to run GPU-like programming models on CPUs by simulating the GPU programming model using language features for coroutines and threading.
The document discusses C++ and its history and features. It describes C++ as an extension of C with object-oriented features like classes. It provides information on the creator of C++, Bjarne Stroustrup, and the evolution of C++ since its introduction as a way to add object-oriented programming to C. It also includes sample C++ code demonstrating the use of arrays and includes from the Boost library.
Groovy is a dynamic language for the Java Virtual Machine that aims to provide a concise, readable syntax with features like closures, metaprogramming and domain-specific language support. Some key features include dynamic typing, operator overloading, builders for generating XML/Swing code and the ability to extend any class or category of objects with additional methods. Groovy aims to be fully interoperable with Java while allowing more compact representations of common patterns.
Despite being a slow interpreter, Python is a key component in high-performance computing (HPC). Python is easy to use. C++ is fast. Together they are a beautiful blend. A new tool, pybind11, makes this approach even more attractive to HPC code. It focuses on the niceties C++11 brings in. Beyond the syntactic sugar around the Python C API, it is interesting to see how pybind11 handles the vast difference between the two languages, and what matters to HPC.
The Evolution of Async-Programming on .NET Platform (TUP, Full)jeffz
The document discusses the evolution of asynchronous programming on the .NET platform. It covers:
1. .NET 1.0 introduced basic asynchronous patterns using Begin/End methods and event-based callbacks, but they broke code locality and were difficult to use.
2. .NET 2.0 and C# 2.0 introduced "yield return" which allowed iterating over asynchronous operations in a synchronous style and improved code locality.
3. .NET 3.0 and F# further advanced this by treating asynchronous operations as first-class functions, allowing easier composition and exception handling of multiple asynchronous tasks.
4. Future versions aim to continue improving asynchronous programming models and libraries to better support cloud, web and mobile
Multithreading with modern C++ is hard. Undefined variables, Deadlocks, Livelocks, Race Conditions, Spurious Wakeups, the Double Checked Locking Pattern, etc. And at the base is the new Memory-Modell which make the life not easier. The story of things which can go wrong is very long. In this talk I give you a tour through the things which can go wrong and show how you can avoid them.
Our new blog post featuring some common python programming patterns and their C++ equivalents is now up!
Leave us a comment below and let us know what you'd like to see covered in our future posts!
█ Read More
Technical Insights: Introduction to GraphQL|goo.gl/d7PyXH
Aiming at complete code coverage by unit tests tends to be cumbersome, especially for cases where external API calls a part of the code base. For these reasons, Python comes with the unittest.mock library, appearing to be a powerful companion in replacing parts of the system under test.
Ansible is an open source automation platform, written in Python, that can be used for configuration-management, application deployment, cloud provisioning, ad-hoc task-execution, multinode orchestration and so on. This talk is an introduction to Ansible for beginners, including tips like how to use containers to mimic multiple machines while iteratively automating some tasks or testing.
The document provides an overview of C++11 concurrency concepts including threads, futures, async, packaged_task, and atomics. It presents examples of using these features, such as creating a thread to run a function concurrently. Tasks are included where the reader codes solutions, such as creating threads to run partial cosine and sine functions concurrently. The document also discusses thread management, condition variables, mutexes, futures, promises, and C++11 memory models. An example of lock-free message passing using an atomic boolean and synchronize-with semantics is presented as a final task.
The fundamentals and advance application of Node will be covered. We will explore the design choices that make Node.js unique, how this changes the way applications are built and how systems of applications work most effectively in this model. You will learn how to create modular code that’s robust, expressive and clear. Understand when to use callbacks, event emitters and streams.
JavaScript is evolving with the addition of modules, platform consistency, and harmony features. Modules allow JavaScript code to be organized and avoid naming collisions. CommonJS and AMD module formats are used widely. Platform consistency is improved through polyfills that mimic future APIs for older browsers. Harmony brings language-level modules and features like destructuring assignment, default parameters, and promises to JavaScript. Traceur compiles Harmony code to existing JavaScript.
The document provides an agenda for a talk on modeling a Rubik's Cube in JavaScript. It begins with an introduction to scripting languages and ECMAScript. It then discusses modeling a Rubik's Cube by first walking through the code, then modeling the cube and finding moves to solve it. The document covers topics like scripting languages, ECMAScript, object-oriented programming concepts in JavaScript, and modeling a Rubik's Cube to be manipulated programmatically.
This document provides an overview of how to write Node.js modules. It discusses writing modules in JavaScript and C/C++, loading modules, publishing modules to the NPM registry, and some advanced topics like handling arguments and creating classes. The key points covered are:
- Modules can be written in JavaScript or C/C++ and exported via module.exports.
- Modules are loaded using require() and can be either core or third-party modules.
- Publishing a module to NPM involves initializing a package, uploading the files to the registry, and adding a main entry point.
- Advanced topics include getting arguments in C/C++ modules, understanding JavaScript types, and creating classes with
This presentation deals with a complex approach to application testing in back end and front end parts, tests writing and common mistakes. It also includes a short overview of libraries and frameworks for creation of tests, as well as practical examples of code.
Presentation by Pavlo Iuriichuk, Lead Software Engineer, GlobalLogic, Kyiv), delivered at an open techtalk on December 11, 2014.
More details - http://globallogic.com.ua/report-web-testing-techtalk-2014
This document introduces TypeScript for Java developers. It provides an overview of TypeScript, why to use it, how to get started, and examples of key TypeScript features like classes, interfaces, generics, decorators, and async/await. The author is an Angular practice lead and Java Champion who has authored books on Angular development with TypeScript. The document demonstrates how to set up a TypeScript environment and compile code, and provides code samples for many TypeScript language features and patterns.
Kotlin coroutine - the next step for RxJava developer?Artur Latoszewski
Kotlin is a language that is rapidly gaining popularity, among others thanks to cooperation with Java. On the other hand, RxJava has brought us many solutions to problems related to asynchronous code. If everything is so cool, do we need anything else in the Kotlin world? Is Kotlin Coroutine a competition for RxJava?
Ten useful JavaScript tips & best practicesAnkit Rastogi
In this presentation there are ten useful JavaScript techniques which can be included in your application easily with less friction along with some AngularJs tips and best practices as a bonus. These tips and best practices are accompanied by examples & will cover script loading, design pattern, performance optimization and other areas.
Since best practices are very subjective topics, proper benchmarking needs to be done.
This document provides an overview and introduction to building a basic fraction calculator app in Objective-C. It begins with an overview of the project architecture using the MVC pattern with a Fraction model class to represent fractions, a Calculator class to perform operations, and a ViewController class to manage the user interface. It then details the implementation of each class, including the Fraction class with methods for creating, modifying, and performing operations on fractions, the Calculator class for setting operands and performing operations, and the ViewController class for handling user interface events and updating the display.
The document discusses functions and function components in C++. It introduces key concepts such as:
- Functions allow programmers to divide programs into modular and reusable pieces.
- Functions are defined once and can be called multiple times from different parts of a program. They take in parameters and return values.
- The standard library provides many commonly used functions for tasks like math operations.
- Functions can be used to encapsulate and reuse code through prototypes and definitions.
- Enumerations allow defining a set of integer constants with unique names for use as variable types.
- Storage classes like static and auto determine where variables are stored in memory and their scope within a program.
This full day course will give you a hands-on, deep dive into React Native. In this course, you will learn how to build cross-platform mobile applications from scratch using Facebook's React Native.
This document summarizes advanced JavaScript concepts including:
- Object-oriented inheritance patterns in JavaScript and trends toward avoiding new and emulating private members. Pseudo-classical inheritance is recommended for better performance.
- Exploiting JavaScript's support for functional programming with higher-order functions to allow functions as arguments and return values for more flexible programming.
- Common issues with asynchronous code in JavaScript and how promises can help address callbacks and synchronization.
- Common pitfalls to avoid with arrays, numbers, and typeof in JavaScript.
This document discusses using Celery and RabbitMQ to implement asynchronous task queues. It provides an overview of Celery and RabbitMQ, how to set them up, configure tasks, schedule and retry tasks, and examples of using task queues for importing large files and sending complex emails. The key benefits highlighted are decoupling tasks from the main system, scalability, and ability to distribute tasks across multiple workers.
Comparison of MQTT and AMQP protocols with advantages and disadvantages of each and showcase of a proof of concept that combines the two for better reliability and efficiency.
The API Journey: GraphQL Specification and ImplementationHaci Murat Yaman
The document discusses GraphQL, including its specification and implementation. It describes GraphQL's basic schema definition (1a), additional features like directives, scalars, and enums (1b), and mutations and subscriptions (1c, 1d). It then covers implementing a simple GraphQL server (2a), using federation for multi-tier architectures (2b), and code generation for speeding development (2c).
This document discusses the evolution of APIs from REST to GraphQL. It begins by describing RESTful microservices and their limitations in needing multiple requests to retrieve related data. Next, it introduces GraphQL as providing a better solution through allowing clients to request specific data in a single query using a defined schema. The document provides an example GraphQL query and describes how Apollo GraphQL can be used to create a GraphQL server and support federated data. It concludes by noting GraphQL addresses issues with REST by being faster, requiring less data transfer and hosting costs, and through integrated development tools.
The document discusses Node.js including:
1. An introduction to Node.js as an asynchronous event-driven JavaScript runtime for building scalable network applications.
2. Common internal Node.js modules like HTTP, File System, and Crypto.
3. Differences between JavaScript on Node.js and Java on JRE.
4. A sample HTTP server using the internal HTTP module to respond with "Hello World".
The document discusses the history and evolution of JavaScript, TypeScript, and related technologies. It describes how JavaScript originated as LiveScript in 1995 and was standardized as ECMAScript. It outlines the development of JavaScript engines like V8 and environments like Node.js that expanded JavaScript beyond browsers. Finally, it introduces TypeScript as a typed superset of JavaScript that transpiles to JavaScript and allows development of client-side and server-side apps using JavaScript and Node.js.
The Saga of JavaScript and Typescript: in Deno landHaci Murat Yaman
This document discusses Deno, a JavaScript and TypeScript runtime built in Rust. It provides 3 key points:
1. Deno was created by Ryan Dahl to address issues he saw in Node.js like security, dependencies, and build systems.
2. Deno is a secure runtime that only allows access to files, network, etc. if explicitly enabled. It uses V8 and includes built-in modules similar to Golang's standard library.
3. Code samples demonstrate creating an HTTP server and reading/writing JSON files in Deno, highlighting features like ES modules and TypeScript support.
React Native vs Flutter - SSTech SystemSSTech System
Your project needs and long-term objectives will ultimately choose which of React Native and Flutter to use. For applications using JavaScript and current web technologies in particular, React Native is a mature and trustworthy choice. For projects that value performance and customizability across many platforms, Flutter, on the other hand, provides outstanding performance and a unified UI development experience.
A captivating AI chatbot PowerPoint presentation is made with a striking backdrop in order to attract a wider audience. Select this template featuring several AI chatbot visuals to boost audience engagement and spontaneity. With the aid of this multi-colored template, you may make a compelling presentation and get extra bonuses. To easily elucidate your ideas, choose a typeface with vibrant colors. You can include your data regarding utilizing the chatbot methodology to the remaining half of the template.
Break data silos with real-time connectivity using Confluent Cloud Connectorsconfluent
Connectors integrate Apache Kafka® with external data systems, enabling you to move away from a brittle spaghetti architecture to one that is more streamlined, secure, and future-proof. However, if your team still spends multiple dev cycles building and managing connectors using just open source Kafka Connect, it’s time to consider a faster and cost-effective alternative.
Sami provided a beginner-friendly introduction to Amazon Web Services (AWS), covering essential terms, products, and services for cloud deployment. Participants explored AWS' latest Gen AI offerings, making it accessible for those starting their cloud journey or integrating AI into coding practices.
What is OCR Technology and How to Extract Text from Any Image for FreeTwisterTools
Discover the fascinating world of Optical Character Recognition (OCR) technology with our comprehensive presentation. Learn how OCR converts various types of documents, such as scanned paper documents, PDFs, or images captured by a digital camera, into editable and searchable data. Dive into the history, modern applications, and future trends of OCR technology. Get step-by-step instructions on how to extract text from any image online for free using a simple tool, along with best practices for OCR image preparation. Ideal for professionals, students, and tech enthusiasts looking to harness the power of OCR.
Efficient hot work permit software for safe, streamlined work permit management and compliance. Enhance safety today. Contact us on +353 214536034.
https://sheqnetwork.com/work-permit/
In this talk, we will explore strategies to optimize the success rate of storing and retaining new information. We will discuss scientifically proven ideal learning intervals and content structures. Additionally, we will examine how to create an environment that improves our focus while you remain in the “flow”. Lastly we will also address the influence of AI on learning capabilities.
In the dynamic field of software development, this knowledge will empower you to accelerate your learning curve and support others in their learning journeys.
Cultural Shifts: Embracing DevOps for Organizational TransformationMindfire Solution
Mindfire Solutions specializes in DevOps services, facilitating digital transformation through streamlined software development and operational efficiency. Their expertise enhances collaboration, accelerates delivery cycles, and ensures scalability using cloud-native technologies. Mindfire Solutions empowers businesses to innovate rapidly and maintain competitive advantage in dynamic market landscapes.
Explore the rapid development journey of TryBoxLang, completed in just 48 hours. This session delves into the innovative process behind creating TryBoxLang, a platform designed to showcase the capabilities of BoxLang by Ortus Solutions. Discover the challenges, strategies, and outcomes of this accelerated development effort, highlighting how TryBoxLang provides a practical introduction to BoxLang's features and benefits.
Overview of ERP - Mechlin Technologies.pptxMitchell Marsh
This PowerPoint presentation provides a comprehensive overview of Enterprise Resource Planning (ERP) systems. It covers the fundamental concepts, benefits, and key functionalities of ERP software, illustrating how it integrates various business processes into a unified system. From finance and HR to supply chain and customer relationship management, ERP facilitates efficient data management and decision-making across organizations. Whether you're new to ERP or looking to deepen your understanding, this presentation offers valuable insights into leveraging ERP for business success.
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple StepsEstuary Flow
Unlock the full potential of your data by effortlessly migrating from PostgreSQL to Snowflake, the leading cloud data warehouse. This comprehensive guide presents an easy-to-follow 8-step process using Estuary Flow, an open-source data operations platform designed to simplify data pipelines.
Discover how to seamlessly transfer your PostgreSQL data to Snowflake, leveraging Estuary Flow's intuitive interface and powerful real-time replication capabilities. Harness the power of both platforms to create a robust data ecosystem that drives business intelligence, analytics, and data-driven decision-making.
Key Takeaways:
1. Effortless Migration: Learn how to migrate your PostgreSQL data to Snowflake in 8 simple steps, even with limited technical expertise.
2. Real-Time Insights: Achieve near-instantaneous data syncing for up-to-the-minute analytics and reporting.
3. Cost-Effective Solution: Lower your total cost of ownership (TCO) with Estuary Flow's efficient and scalable architecture.
4. Seamless Integration: Combine the strengths of PostgreSQL's transactional power with Snowflake's cloud-native scalability and data warehousing features.
Don't miss out on this opportunity to unlock the full potential of your data. Read & Download this comprehensive guide now and embark on a seamless data journey from PostgreSQL to Snowflake with Estuary Flow!
Try it Free: https://dashboard.estuary.dev/register
Are you wondering how to migrate to the Cloud? At the ITB session, we addressed the challenge of managing multiple ColdFusion licenses and AWS EC2 instances. Discover how you can consolidate with just one EC2 instance capable of running over 50 apps using CommandBox ColdFusion. This solution supports both ColdFusion flavors and includes cb-websites, a GoLang binary for managing CommandBox websites.
3. 1. Prototype-based OOP
• It is like working with templates and copying those templates
• Object prototypes are dynamic; they can be changed at run-time
• Objects based on those prototypes are also dynamic
• Prototypes can copy behaviour of other prototypes (Inheritance)
• Multiple prototypes can implement same behaviour (Polymorphism)
4. 1. Sample Code (a)
// 1.a. generic object
const person0 = { name: 'Adam', age: 101, friends: [] };
person0.follow = friend => { this.friends.push(friend); };
const person1 = Object.create(person0);
// 1.b. we can also put it inside a 'factory' function and return person object
const makePerson = (name = '', age = 0, friends = []) => { /* create person0 */ return person0; };
// 2. function definition
function Person(name = '', age = 0, friends = []) {
this.name = name;
this.age = age;
this.friends = friends;
this.follow = friend => { this.friends.push(friend); };
}
const person2 = new Person('Becky', 102);
// 3. class definition
class PersonModel {
constructor(name = '', age = 0, friends = []) {
this.name = name;
this.age = age;
this.friends = friends;
}
follow(friend) { this.friends.push(friend); }
}
PersonModel.prototype.talk = sentence => { console.log(sentence); /* TODO use TTS engine */ }
const person3 = new PersonModel('Conor', 103);
Ref: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object-oriented_JS
5. 2. Asynchronous Programming
• Callback functions: Fire and forget; we will call you back!
• Functions as arguments to other functions
• Timers: setTimeout(), setInterval()
• Promises: special object that “mimic” threads
• Special methods: then(), catch()
• Callback hell:
• Async/Await heaven
6. 2. Sample Code (a)
// Timers
function showTime() { console.log(new Date()); }
const id = setInterval(showTime, 1000); // run every second
function stopShowingTime() { clearInterval(id); console.log('stopped'); process.exit(0); }
setTimeout(stopShowingTime, 10 * 1000); // run after ten seconds once
console.log('started');
// Promises
function promiseHandler(resolve, reject) {
const r = Math.random();
0.9 <= r // ternary expression used as statement
? resolve({ success: 'we got: ' + r }) // captured by then() callback
: reject({ error: 'sorry, we got: ' + r }); // captured by catch() callback
}
const randomPromise = new Promise(promiseHandler);
const startRandomPromise = () => {
randomPromise.then(console.info).catch(console.error);
}
startRandomPromise();
8. 3. Automated Tests
• “Mocha is a feature-rich JavaScript test framework running on
Node.js and in the browser”
• Define test suites/cases by using simple function calls and callback functions
• Use async/await within callback functions, if preferred,
• “Chai is a BDD / TDD assertion library for node and the browser”
• Verify the expectations using chainable interfaces: expect, should, assert
13. The End
Thank you
Useful links:
https://nodejs.dev/learn
https://pptr.dev/
https://mochajs.org/
https://www.chaijs.com/
https://istanbul.js.org/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator
https://www.typescriptlang.org/